<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kabus.eu</title><link>https://kabus.eu/</link><description>Recent content on Kabus.eu</description><generator>Hugo -- gohugo.io</generator><language>en-GB</language><atom:link href="https://kabus.eu/index.xml" rel="self" type="application/rss+xml"/><item><title>Pigreads: The Python-integrated GPU-enabled reaction-diffusion solver using OpenCL for cardiac electrophysiology and other applications</title><link>https://kabus.eu/2026/02/23/kabus2026pigreads/</link><pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate><guid>https://kabus.eu/2026/02/23/kabus2026pigreads/</guid><description>&lt;img src="https://kabus.eu/2026/02/23/kabus2026pigreads/fig/abstract.png" alt="Featured image of post Pigreads: The Python-integrated GPU-enabled reaction-diffusion solver using OpenCL for cardiac electrophysiology and other applications" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;This article was previously published in Computer Physics Communications,
110088 (Kabus, et al., 2026). More about Pigreads can be found online at &lt;a class="link" href="https://gitlab.com/pigreads/pigreads" target="_blank" rel="noopener"
 &gt;its
code repository on GitLab&lt;/a&gt;, &lt;a class="link" href="https://pigreads.readthedocs.io/" target="_blank" rel="noopener"
 &gt;its
documentation&lt;/a&gt;. A PDF of the article can be
downloaded at the website of &lt;a class="link" href="https://doi.org/10.1016/j.cpc.2026.110088" target="_blank" rel="noopener"
 &gt;Computer Physics Communications 110088 (DOI:
10.1016/j.cpc.2026.110088)&lt;/a&gt;, or
directly &lt;a class="link" href="https://pigreads.gitlab.io/paper/kabus2026pigreads.pdf" target="_blank" rel="noopener"
 &gt;here&lt;/a&gt;.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Desmond Kabus&lt;sup&gt;1,2&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0002-6965-5211" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0002-6965-5211&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hans Dierckx&lt;sup&gt;1,2&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0003-0899-8082" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0003-0899-8082&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tim De Coster&lt;sup&gt;1,2&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0002-4942-9866" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0002-4942-9866&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Institutions:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Laboratory of Experimental Cardiology, Leiden University Medical Center (LUMC), Albinusdreef 2, 2333 ZA Leiden, The Netherlands&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mathematical Institute, Leiden University, Einsteinweg 55, 2333 CC Leiden, The Netherlands&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;DOI:&lt;/strong&gt;
&lt;a class="link" href="https://doi.org/10.1016/j.cpc.2026.110088" target="_blank" rel="noopener"
 &gt;10.1016/j.cpc.2026.110088&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keywords:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;reaction-diffusion&lt;/li&gt;
&lt;li&gt;finite differences&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;OpenCL&lt;/li&gt;
&lt;li&gt;GPU&lt;/li&gt;
&lt;li&gt;electrophysiology&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPU-accelerated reaction-diffusion solver in up to three dimensions.&lt;/li&gt;
&lt;li&gt;Minimal NumPy-friendly API with OpenCL kernels.&lt;/li&gt;
&lt;li&gt;Includes commonly used reaction terms for cardiac electrophysiology.&lt;/li&gt;
&lt;li&gt;Open-source, tested, documented, with examples and tutorials.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pigreads is a streamlined Python module for efficient numerical solution
of reaction-diffusion systems on graphics cards (GPU), with CPU
fallback. It exposes a simple and straight-forward NumPy-compatible API.
Users may employ built-in models &amp;ndash; including electrophysiology examples
&amp;ndash; or supply custom reaction terms. Supported features include 0D-3D
uniform Cartesian grids, no-flux and periodic boundary conditions,
anisotropic diffusion, spatially varying diffusion and reaction, and
localised source terms. The project is open-source, tested, documented,
and distributed with examples and tutorials.&lt;/p&gt;
&lt;div id="introduction"&gt;
&lt;h1 id="introduction"&gt;Introduction
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Reaction-diffusion systems appear across physics, chemistry, biology,
and ecology; they are used to study pattern formation and excitable
waves, for instance in electrophysiology (&lt;a class="link" href="#ref-cannon2014neurosystems" &gt;Cannon et al.,
2014&lt;/a&gt;; &lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;; &lt;a class="link" href="#ref-kapral1995chemical" &gt;Kapral &amp;amp; Showalter,
1995&lt;/a&gt;; &lt;a class="link" href="#ref-lechleiter1991spiral" &gt;Lechleiter et al.,
1991&lt;/a&gt;; &lt;a class="link" href="#ref-murray1976travelling" &gt;Murray,
1976&lt;/a&gt;; &lt;a class="link" href="#ref-rotermund1990imaging" &gt;Rotermund et al.,
1990&lt;/a&gt;). Their numerical solution can be
computationally demanding, so efficient implementations are essential,
ranging from ad-hoc research codes to large general software packages
(&lt;a class="link" href="#ref-niederer2011verification" &gt;Niederer et al., 2011&lt;/a&gt;). However,
modern applications such as inverse problems, parameter estimation,
uncertainty quantification, and machine learning, require a compact code
with minimal installation requirements that is portable across
platforms, runs fast, and can easily be integrated into other software
or frameworks.&lt;/p&gt;
&lt;p&gt;Pigreads is a Python module (&lt;a class="link" href="#ref-python" &gt;van Rossum et al., 1995&lt;/a&gt;)
that provides a minimal, concise, and NumPy-friendly API (&lt;a class="link" href="#ref-numpy" &gt;Harris et
al., 2020&lt;/a&gt;) to define and run reaction-diffusion simulations
while performing the costly computations efficiently on accelerators:
Computational kernels implemented in OpenCL (&lt;a class="link" href="#ref-opencl" &gt;Stone et al.,
2010&lt;/a&gt;) run on both GPUs and CPUs as a fallback via
PyOpenCL (&lt;a class="link" href="#ref-pyopencl" &gt;Klöckner et al., 2012&lt;/a&gt;). The Pigreads module
includes several pre-defined models relevant to electrophysiology; users
can also supply custom reaction terms.&lt;/p&gt;
&lt;p&gt;Representative examples are illustrated in Fig. &lt;a class="link" href="#fig:teaser" &gt;1&lt;/a&gt;:
simulations of the conduction in a 1D cable of excitable cells, 2D
pieces of cardiac tissue like monolayers in culture wells, and numerical
electrophysiology experiments of whole organs in 3D like the ventricles
or atria of the human heart. The 0D case, i.e., without diffusion, is
also supported to perform single cell simulations.&lt;/p&gt;
&lt;div id="fig:teaser"&gt;
&lt;p&gt;&lt;img alt="Pigreads can be used to solve reaction-diffusion systems in up to three dimensions" class="gallery-image" data-flex-basis="271px" data-flex-grow="113" height="1768" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2026/02/23/kabus2026pigreads/fig/teaser.png" srcset="https://kabus.eu/2026/02/23/kabus2026pigreads/fig/teaser_hu_ceea79d1961f2d72.png 800w, https://kabus.eu/2026/02/23/kabus2026pigreads/fig/teaser_hu_f8a8bea2e5e733b7.png 1600w, https://kabus.eu/2026/02/23/kabus2026pigreads/fig/teaser.png 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;Figure 1: &lt;strong&gt;Pigreads can be used to solve reaction-diffusion systems in
up to three dimensions.&lt;/strong&gt; &lt;strong&gt;A.&lt;/strong&gt; Cardiac action potentials for the model
by Courtemanche et al. (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;1998&lt;/a&gt;) in the 0D
case, i.e., without diffusion. &lt;strong&gt;B.&lt;/strong&gt; Three travelling pulses in a cable
(1D) followed by a fourth blocked pulse in the same model. &lt;strong&gt;C.&lt;/strong&gt; A
spiral wave in a circular 2D domain in the model by Marcotte &amp;amp; Grigoriev
(&lt;a class="link" href="#ref-marcotte2017dynamical" &gt;2017&lt;/a&gt;) that was stimulated by increasing
the main variable on a line between high and low values of the recovery
variable. &lt;strong&gt;D.&lt;/strong&gt; Pseudo-electrograms for a travelling wave in a 2D piece
of tissue with periodic boundary conditions on the top and bottom and
different cell types for mid-wall, endo-, and epi-cardial cells
following the model by ten Tusscher &amp;amp; Panfilov
(&lt;a class="link" href="#ref-tentusscher2006alternans" &gt;2006&lt;/a&gt;) with 15% fibrosis, stimulated
three pulses at the locations and times labelled S0&amp;ndash;2. &lt;strong&gt;E.&lt;/strong&gt;
Three-dimensional cardiac electrophysiology simulations in human
bi-ventricular (&lt;a class="link" href="#ref-hren1996realistic" &gt;Hren, 1996&lt;/a&gt;,
&lt;a class="link" href="#ref-hren1996realistic2" &gt;1998&lt;/a&gt;; &lt;a class="link" href="#ref-hren1996realistic1" &gt;Keldermann et al.,
2009&lt;/a&gt;) and human bi-atrial (&lt;a class="link" href="#ref-decoster2018myocyte" &gt;De Coster et al.,
2018&lt;/a&gt;; &lt;a class="link" href="#ref-decoster2018myocyte1" &gt;Dossel et al.,
2011&lt;/a&gt;) geometries with faster diffusion along
muscle fibres. A single pulse is sent out from the apex or the
sino-atrial node, respectively. We use the models by ten Tusscher &amp;amp;
Panfilov (&lt;a class="link" href="#ref-tentusscher2006alternans" &gt;2006&lt;/a&gt;) for the ventricles and
by Courtemanche et al. (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;1998&lt;/a&gt;) for the
atria.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The module is available on
&lt;a class="link" href="https://gitlab.com/pigreads/pigreads" target="_blank" rel="noopener"
 &gt;GitLab&lt;/a&gt;, where it is properly
tested using continuous integration, and is well-documented on &lt;a class="link" href="https://pigreads.readthedocs.io" target="_blank" rel="noopener"
 &gt;Read the
Docs&lt;/a&gt;, with examples and tutorials.
Pigreads can be installed from the &lt;a class="link" href="https://pypi.org/project/pigreads" target="_blank" rel="noopener"
 &gt;Python Package Index
PyPI&lt;/a&gt; via:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ pip install pigreads
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Consider also installing the optional dependencies for the command line
interface (CLI) and creating plots and videos via:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ pip install 'pigreads[all]'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The CLI can be used to run and visualise Pigreads simulations defined in
a YAML file (&lt;a class="link" href="#ref-yaml" &gt;Net, 2023&lt;/a&gt;) adhering to a
&lt;a class="link" href="https://github.com/pydantic/pydantic" target="_blank" rel="noopener"
 &gt;Pydantic&lt;/a&gt; scheme as described in
the documentation.&lt;/p&gt;
&lt;div id="mathematical-problem-definition"&gt;
&lt;h1 id="mathematical-problem-definition"&gt;Mathematical problem definition
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;We generally define reaction-diffusion systems as:
&lt;span id="eq:rd"&gt;$$
\partial_t {{\underline{{u}}}}(t, {{\bm{{x}}}})
=
\underbrace{
 {{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}}({{\bm{{x}}}}) \nabla {{\underline{{u}}}}(t, {{\bm{{x}}}})
}_{\text{diffusion}}
+
\underbrace{
 {{\underline{{r}}}}({{\underline{{u}}}}, {{\bm{{x}}}})
}_{\text{reaction}}
+
\underbrace{
 {{\underline{{s}}}}(t, {{\bm{{x}}}})
}_{\text{source}}
\qquad{(1)}$$&lt;/span&gt; for time
$t\in[0, T]$ and space
${{\bm{{x}}}} = {{{{\left[ x, y, z \right]}}}^\mathrm{T}} \in\heartsuit\subset\mathbb R^3$
in the domain $\heartsuit$, with initial conditions
${{\underline{{u}}}}(0, {{\bm{{x}}}})$ and no-flux
boundary conditions
$0 = {{\bm{{n}}}}\cdot {{\bm{{D}}}} \nabla u$ for
diffused variables on
${{\bm{{x}}}} \in \partial\heartsuit$. At each point
in time and space, the states vector
${{\underline{{u}}}}(t, {{\bm{{x}}}}) \in \mathbb R^{\mathtt{Nv}}$
consists of &lt;code&gt;Nv&lt;/code&gt; elements, the so-called states or variables,
$u_0$, $u_1$, &amp;hellip;,
$u_{\mathtt{Nv}-1}$. For the diffusion term, we
define the diffusivity matrix ${{\bm{{D}}}}({{\bm{{x}}}}) \in
\mathbb R^{3\times 3}$ and the selection matrix
${{\underline{{P}}}} \in \mathbb
R^{\mathtt{Nv}\times\mathtt{Nv}}$ to select which variables to
diffuse and how strongly. The selection matrix often takes the sparse
form ${{\underline{{P}}}} =
\operatorname{diag}(P_{0}, ..., P_{\mathtt{Nv}-1})$ with
mostly zeros. The reaction term
${{\underline{{r}}}}({{\underline{{u}}}}, {{\bm{{x}}}}) \in \mathbb R^{\mathtt{Nv}}$
describes the local dynamics of the system and may vary in space, for
instance in parameters or even in the model equations themselves. We
refer to a specific local choice of
${{\underline{{r}}}}_{\mathtt{imodel}}({{\underline{{u}}}})$
with fixed parameters as a model;
${{\underline{{r}}}}$ refers to the reaction term,
i.e., all models. The source term
${{\underline{{s}}}}(t, {{\bm{{x}}}}) \in \mathbb R^{\mathtt{Nv}}$
can be used to add external influences to the system, for instance to
stimulate the system at specific times and locations.&lt;/p&gt;
&lt;p&gt;For no source term, ${{\underline{{s}}}} = 0$,
homogeneous and isotropic diffusion,
${{\bm{{D}}}}({{\bm{{x}}}}) = D = \text{const.}$, and
only two variables, $u = u_0$ and
$v = u_1$, with only $u$
diffusing, $P_0 = 1$, $P_1 = 0$,
the system reduces to: &lt;span &gt;$$
\begin{align}
\partial_t u(t, {{\bm{{x}}}})
&amp;=
D \nabla^2 u(t, {{\bm{{x}}}}) + r_u(u, v)
\\
\partial_t v(t, {{\bm{{x}}}})
&amp;=
r_v(u, v)
\end{align}
\qquad{(2)}$$&lt;/span&gt;&lt;/p&gt;
&lt;div id="sec:tech"&gt;
&lt;h1 id="technical-overview"&gt;Technical overview
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Pigreads organises simulation components around three objects: an
instance of the class &lt;code&gt;Models&lt;/code&gt; that defines local reaction terms, an
array &lt;code&gt;inhom&lt;/code&gt; that defines the domain and which model to use where, and
an array &lt;code&gt;states&lt;/code&gt; holding all state variables on a uniform Cartesian
grid; see also the flowchart in Fig. &lt;a class="link" href="#fig:scheme" &gt;2&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:scheme"&gt;
&lt;p&gt;&lt;img alt="Main components of a simulation to solve a reaction-diffusion problem using Pigreads" class="gallery-image" data-flex-basis="344px" data-flex-grow="143" height="1395" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2026/02/23/kabus2026pigreads/fig/scheme.png" srcset="https://kabus.eu/2026/02/23/kabus2026pigreads/fig/scheme_hu_94545af44b13b187.png 800w, https://kabus.eu/2026/02/23/kabus2026pigreads/fig/scheme_hu_b6dac9609babe11e.png 1600w, https://kabus.eu/2026/02/23/kabus2026pigreads/fig/scheme.png 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;Figure 2: &lt;strong&gt;Main components of a simulation to solve a
reaction-diffusion problem using Pigreads.&lt;/strong&gt; The state variables at each
point in the grid at the frames are stored in the variable &lt;code&gt;states&lt;/code&gt;. The
main computations are done in the method &lt;code&gt;models.run&lt;/code&gt;, which performs
&lt;code&gt;Nt&lt;/code&gt; forward Euler steps with time step &lt;code&gt;dt&lt;/code&gt;, outputting the subsequent
frame after these &lt;code&gt;Nt&lt;/code&gt; steps.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Numerical choices are deliberately simple: finite-difference stencils
for spatial derivatives and explicit forward-Euler time stepping.
Supported capabilities include 0D-3D grids, no-flux and periodic
boundary conditions, spatially varying anisotropic diffusivity and
reaction terms, and source terms.&lt;/p&gt;
&lt;p&gt;Diffusion and reaction kernels run in OpenCL on the selected GPU/CPU
device; Python performs setup, parameter changes, and in- and output
while results remain accessible as NumPy arrays for analysis and
plotting, for instance using Matplotlib (&lt;a class="link" href="#ref-matplotlib" &gt;Hunter,
2007&lt;/a&gt;) or PyVista (&lt;a class="link" href="#ref-pyvista" &gt;Sullivan &amp;amp; Kaszynski,
2019&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Note that execution of the kernels requires a compatible OpenCL runtime
environment. For example, for Nvidia graphics cards, the runtime is
provided through the CUDA toolkit and corresponding device drivers. For
AMD devices, it is available via the AMD ROCm platform, and for Intel
devices, through the Intel oneAPI toolkit. Alternatively, the PoCL
implementation can be used for CPU-based or generic OpenCL execution.&lt;/p&gt;
&lt;p&gt;We validated our code by using it to successfully compute the correct
solution to the problem proposed by Niederer et al.
(&lt;a class="link" href="#ref-niederer2011verification" &gt;2011&lt;/a&gt;): simulation of the model by ten
Tusscher &amp;amp; Panfilov (&lt;a class="link" href="#ref-tentusscher2006alternans" &gt;2006&lt;/a&gt;) for 100 ms
in a slab of 3 × 7 × 20 mm. As a benchmark, on an NVIDIA GeForce RTX
2080 Super GPU with Max-Q Design, the computations take 0.025 s at the
coarsest resolution of 0.5 mm and 0.05 ms; and 41.9 s at the finest
resolution of 0.1 mm and 0.005 ms.&lt;/p&gt;
&lt;p&gt;Unit testing is used to ensure all components of Pigreads work as
expected: Code changes are automatically tested using continuous
integration where the API is exercised and numerically validated against
known results. The tests cover 100% of the code.&lt;/p&gt;
&lt;div id="hands-on-example"&gt;
&lt;h1 id="hands-on-example"&gt;Hands-on example
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;In this section, we define and run a simple 2D simulation of a spiral
wave in a two-variable model that breaks up to spiral chaos in a
circular domain with no-flux boundary conditions. With this example, it
is shown in which steps a Pigreads simulation is usually defined.&lt;/p&gt;
&lt;p&gt;First, define the coordinates of the geometry to be used. In this
example, we use a 2D plane with 200 points in both
$x$ and $y$:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import pigreads as pig
import numpy as np
R = 10
z, y, x = np.mgrid[0:1, -R:R:200j, -R:R:200j]
Nz, Ny, Nx = x.shape
dz, dy, dx = pig.deltas(z, y, x)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pigreads is optimised for three-dimensional space. For lower-dimensional
simulations, set the number of points in additional dimensions to one,
as done above for the $z$-dimension. Note that
&lt;code&gt;np.mgrid&lt;/code&gt; is used to define a dense multi-dimensional grid where the
coordinates, in this case, are defined as the range of integers from 0
up to but excluding 1 in &lt;code&gt;z&lt;/code&gt;, i.e., $z \in \{0\}$,
and &lt;code&gt;-R&lt;/code&gt; to &lt;code&gt;R&lt;/code&gt; divided into 200 equal steps including both end points
in &lt;code&gt;y&lt;/code&gt; and &lt;code&gt;x&lt;/code&gt;. See the documentation of NumPy for details. The function
&lt;code&gt;pig.deltas&lt;/code&gt; returns the grid spacing &lt;code&gt;dz&lt;/code&gt;, &lt;code&gt;dy&lt;/code&gt;, &lt;code&gt;dx&lt;/code&gt; that is used in
the arrays &lt;code&gt;z&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;, &lt;code&gt;x&lt;/code&gt;, which each have a shape of &lt;code&gt;(Nz, Ny, Nx)&lt;/code&gt;.
Space in Pigreads is periodic by default, such that the points at index
&lt;code&gt;ix = 0&lt;/code&gt; are neighbours with the points at &lt;code&gt;ix = 1&lt;/code&gt; and &lt;code&gt;ix = Nx - 1&lt;/code&gt;,
and likewise for the other dimensions.&lt;/p&gt;
&lt;p&gt;The grid spacing &lt;code&gt;dz&lt;/code&gt;, &lt;code&gt;dy&lt;/code&gt;, &lt;code&gt;dx&lt;/code&gt; must be chosen small enough to resolve
the dynamics of the system, but large enough to keep the computational
cost manageable. For instance, at insufficient spatial resolution, the
conduction is slower along grid axes than diagonal to them. One may use
this effect to determine an as large as possible grid spacing &lt;code&gt;dx&lt;/code&gt; such
that the difference between the fastest and slowest stimulation at some
distance is less than a given threshold, for instance 5%.&lt;/p&gt;
&lt;p&gt;The integer field &lt;code&gt;inhom&lt;/code&gt; defines which points are outside
(&lt;code&gt;inhom == 0&lt;/code&gt;) and inside the domain $\heartsuit$
(&lt;code&gt;inhom &amp;gt; 0&lt;/code&gt;). Pigreads implements no-flux boundary conditions on
$\partial\heartsuit$. In our example, we define the
domain $\heartsuit$ as a disk of radius
$R$:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;inhom = np.ones(x.shape, dtype=int)
r = np.linalg.norm((x, y, z), axis=0)
inhom[r &amp;gt;= R] = 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Values of &lt;code&gt;inhom&lt;/code&gt; larger than zero can be used to select one or multiple
models, i.e., reaction terms ${{\underline{{r}}}}$.
For an &lt;code&gt;inhom&lt;/code&gt; value of 1, &lt;code&gt;models[0]&lt;/code&gt; is used; and &lt;code&gt;models[1]&lt;/code&gt; for a
value of 2, etc. One or more of the available models can be selected
using an instance of the &lt;code&gt;Models&lt;/code&gt; class:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;models = pig.Models()
models.add(&amp;quot;marcotte2017dynamical&amp;quot;, beta=1.389)
Nv = models.Nv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;key&lt;/code&gt; of a model &amp;ndash; an identifying string &amp;ndash; is here used to choose
a model and keyword arguments are used to set model parameters to
different values than the defaults; the function &lt;code&gt;add&lt;/code&gt; may be called
multiple times to add more models. When using multiple models, the
largest number of variables &lt;code&gt;Nv&lt;/code&gt; is used.&lt;/p&gt;
&lt;p&gt;Various models are pre-defined in Pigreads, and defining another model
is straight-forward, see section &lt;a class="link" href="#sec:models" &gt;5&lt;/a&gt;. A list of the
available models can also be obtained programmatically using:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for key in pig.Models.available.keys():
 print(key)
# aliev1996simple
# barkley1991model
# beeler1977reconstruction
# ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For some models, there are multiple sets of parameters available, they
may be accessed via the additional &lt;code&gt;meta&lt;/code&gt; data of a model definition:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;key = &amp;quot;tentusscher2006alternans&amp;quot;
model_def = pig.Models.available[key]
endo = model_def.meta[&amp;quot;parameter sets&amp;quot;][&amp;quot;endo&amp;quot;]
for parameter, value in endo.items():
 print(f&amp;quot;{parameter} = {value}&amp;quot;)
# g_Ks = 0.392
# g_to = 0.073
# s_offset = 28.0
# s_variant = 1.0
models_ = pig.Models()
models_.add(key, **endo)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the next step, memory needs to be allocated to store the state
variables of the model. For this, we typically use a 5D array of shape
&lt;code&gt;(Nfr, Nz, Ny, Nx, Nv)&lt;/code&gt; called &lt;code&gt;states&lt;/code&gt; in Pigreads. It consists of the
values of all &lt;code&gt;Nv&lt;/code&gt; variables at each point in space on &lt;code&gt;Nfr&lt;/code&gt; so-called
frames in time.&lt;/p&gt;
&lt;p&gt;One way to initialise a &lt;code&gt;states&lt;/code&gt; array is using the function
&lt;code&gt;models.resting_states&lt;/code&gt;: It creates an array of the correct shape and
fills its first frame with the appropriate resting values for each model
according to the value of &lt;code&gt;inhom&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Nfr = 100
states = models.resting_states(inhom, Nframes=Nfr)
assert states.shape == (Nfr, Nz, Ny, Nx, Nv)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that this allocates a potentially large amount of memory, as
&lt;code&gt;states&lt;/code&gt; is a 5D array of shape &lt;code&gt;(Nfr, Nz, Ny, Nx, Nv)&lt;/code&gt;. For large
simulations, it may be better to only store a few frames and overwrite
older frames, or to save frames to disk and not keep them in memory, for
instance via memory mapping:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;states = np.lib.format.open_memmap(&amp;quot;states.npy&amp;quot;,
 mode='w+', dtype=np.float32,
 shape=(Nfr, Nz, Ny, Nx, Nv),
)
states[:1] = models.resting_states(inhom, Nframes=1)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the full history over time does not need to be kept, it is also
possible to create a &lt;code&gt;states&lt;/code&gt; array of only a few frames, continually
overwriting them in an infinite loop. We use this scheme in some of the
interactive examples that can be found in the code repository.&lt;/p&gt;
&lt;p&gt;Initial conditions can then be set in the frame with &lt;code&gt;ifr = 0&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;states[0, x &amp;lt; -8, 0] = 1
states[0, y &amp;lt; 0, 1] = 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or equivalently expressed in mathematical notation:
&lt;span &gt;$$
\begin{align}
u_0(t = 0, {{\bm{{x}}}}) &amp;=
\begin{cases}
 1 &amp; \text{if}\, x &lt; -8 \\
 u_{0,\,\text{rest}} &amp; \text{else}
\end{cases}
\\
u_1(t = 0, {{\bm{{x}}}}) &amp;=
\begin{cases}
 2 &amp; \text{if}\, y &lt; 0 \\
 u_{1,\,\text{rest}} &amp; \text{else}
\end{cases}
\end{align}
\qquad{(3)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The calculation of the diffusion term
${{\underline{{P}}}} \nabla \cdot
{{\bm{{D}}}} \nabla {{\underline{{u}}}}$ is implemented as a
weighted sum of neighbouring points. The weights can be calculated using
the function &lt;code&gt;weights&lt;/code&gt;, which also requires the diffusivity
${{\bm{{D}}}}$ as input:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;diffusivity = pig.diffusivity_matrix(Df=0.03)
weights = models.weights(dz, dy, dx, inhom, diffusivity)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Calculating the weights is an expensive operation. Once they are
calculated for a given geometry, it is possible to store and re-use
them. Together with &lt;code&gt;inhom&lt;/code&gt;, they fully encode all the necessary
information about geometry needed for the numerical scheme in
&lt;code&gt;models.run&lt;/code&gt; below.&lt;/p&gt;
&lt;p&gt;Finally, the simulation can be started using &lt;code&gt;run&lt;/code&gt; to advance the
simulation from one frame to the next, which is done in a loop over the
number of frames &lt;code&gt;Nfr&lt;/code&gt;. The function &lt;code&gt;run&lt;/code&gt; does &lt;code&gt;Nt&lt;/code&gt; forward Euler steps
and only returns the final states after those steps:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Nt = 200
dt = 0.025
for ifr in range(Nfr - 1):
 states[ifr + 1] = models.run(
 inhom, weights, states[ifr],
 Nt=Nt, dt=dt,
 )
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that for numerical stability, the time step &lt;code&gt;dt&lt;/code&gt; needs to be chosen
small enough to at least meet the Courant-Friedrichs-Lewy (CFL)
condition (&lt;a class="link" href="#ref-courant1928cfl" &gt;Courant et al., 1928&lt;/a&gt;), which
informally can be summarised as: &amp;ldquo;The wave must travel less than one
grid length per time step.&amp;rdquo; A smaller time step will lead to higher
accuracy at higher computational cost. We usually choose &lt;code&gt;dt&lt;/code&gt; as large
as possible while still obtaining a solution that does not change
significantly for smaller &lt;code&gt;dt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Additional arguments to &lt;code&gt;run&lt;/code&gt; may be used to add stimulus currents at
specific times and locations. See the documentation for more details.&lt;/p&gt;
&lt;p&gt;Now that the simulation is done, the 5D array &lt;code&gt;states&lt;/code&gt; containing the
result can be analysed and visualised, for instance with Matplotlib
(&lt;a class="link" href="#ref-matplotlib" &gt;Hunter, 2007&lt;/a&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import matplotlib.pyplot as plt
plt.imshow(states[-1, 0, :, :, 0])
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or as a movie using &lt;a class="link" href="https://ffmpeg.org" target="_blank" rel="noopener"
 &gt;FFmpeg&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from pigreads.plot import movie
movie(&amp;quot;example.mp4&amp;quot;, states[:, 0, :, :, 0])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Additional more in-depth examples are available in the comprehensive
&lt;a class="link" href="https://pigreads.readthedocs.io" target="_blank" rel="noopener"
 &gt;API documentation&lt;/a&gt; and in the &lt;a class="link" href="https://gitlab.com/pigreads/pigreads" target="_blank" rel="noopener"
 &gt;Git
repository&lt;/a&gt; of this project.&lt;/p&gt;
&lt;div id="sec:models"&gt;
&lt;h1 id="reaction-terms"&gt;Reaction terms
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The so-called models define the reaction term
${{\underline{{r}}}}$ of the reaction-diffusion
equation (Eq. &lt;a class="link" href="#eq:rd" &gt;1&lt;/a&gt;). While Pigreads comes with a variety of
pre-defined models, it is also easily possible to define a model.&lt;/p&gt;
&lt;p&gt;A model can be defined by adding it to the dictionary of available
models using just a few lines of OpenCL code, for instance the model by
FitzHugh (&lt;a class="link" href="#ref-fitzhugh1961impulses" &gt;1961&lt;/a&gt;) and Nagumo et al.
(&lt;a class="link" href="#ref-nagumo1962active" &gt;1962&lt;/a&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import pigreads as pig
from pigreads.schema.model import ModelDefinition
pig.Models.available[&amp;quot;fitzhugh1961impulses&amp;quot;] = \
ModelDefinition(
 name=&amp;quot;FitzHugh 1961 &amp;amp; Nagumo 1962&amp;quot;,
 description=
 &amp;quot;A 2D simplification of the Hodgkin-Huxley model.&amp;quot;,
 dois=[
 &amp;quot;https://doi.org/10.1016/S0006-3495(61)86902-6&amp;quot;,
 &amp;quot;https://doi.org/10.1109/JRPROC.1962.288235&amp;quot;,
 ],
 variables={&amp;quot;u&amp;quot;: 1.2, &amp;quot;v&amp;quot;: -0.625},
 diffusivity={&amp;quot;u&amp;quot;: 1.0},
 parameters={&amp;quot;a&amp;quot;: 0.7, &amp;quot;b&amp;quot;: 0.8, &amp;quot;c&amp;quot;: 3.0, &amp;quot;z&amp;quot;: 0.0},
 code=&amp;quot;&amp;quot;&amp;quot;
 *_new_u = u + dt * (v + u - u*u*u/3 + z + _diffuse_u);
 *_new_v = v + dt * (-(u - a + b*v)/c);
 &amp;quot;&amp;quot;&amp;quot;,
)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To import a model from a Myokit (&lt;a class="link" href="#ref-clerx2016myokit" &gt;Clerx et al.,
2016&lt;/a&gt;) or CellML (&lt;a class="link" href="#ref-clerx2020cellml" &gt;Clerx et al.,
2020&lt;/a&gt;) file, a converter is provided in the
repository.&lt;/p&gt;
&lt;p&gt;While the main application of Pigreads is cardiac electrophysiology,
there are various more general pre-defined models: The trivial model
defines diffusion of a single variable without a reaction term, the
model by Gray &amp;amp; Scott (&lt;a class="link" href="#ref-gray1983autocatalytic" &gt;1983&lt;/a&gt;) is used in
pattern formation studies, and the models by Barkley
(&lt;a class="link" href="#ref-barkley1991model" &gt;1991&lt;/a&gt;) and Hodgkin &amp;amp; Huxley
(&lt;a class="link" href="#ref-hodgkin1952quantitative" &gt;1952&lt;/a&gt;) are some of the simplest and
earliest models for electrophysiology in general. Simple example
simulations for these models are shown in Fig. &lt;a class="link" href="#fig:models:others" &gt;3&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:models:others"&gt;
&lt;p&gt;&lt;img alt="Pigreads includes various pre-defined models" class="gallery-image" data-flex-basis="334px" data-flex-grow="139" height="1433" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2026/02/23/kabus2026pigreads/fig/others.png" srcset="https://kabus.eu/2026/02/23/kabus2026pigreads/fig/others_hu_9488ba0b38722bac.png 800w, https://kabus.eu/2026/02/23/kabus2026pigreads/fig/others_hu_152ac15102cd245a.png 1600w, https://kabus.eu/2026/02/23/kabus2026pigreads/fig/others.png 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;Figure 3: &lt;strong&gt;Pigreads includes various pre-defined models.&lt;/strong&gt; The panels
each contain a 2D simulation of a different model and a time trace at
the marked reference point in the domain for manually chosen simulation
parameters. See also the model overview in Table &lt;strong&gt;¿tbl:models?&lt;/strong&gt;.
&lt;strong&gt;A.&lt;/strong&gt; The trivial model defines diffusion of a single variable. &lt;strong&gt;B.&lt;/strong&gt;
The model by Gray &amp;amp; Scott (&lt;a class="link" href="#ref-gray1983autocatalytic" &gt;1983&lt;/a&gt;) describes
the formation of various patterns depending on chosen parameters. &lt;strong&gt;C.&lt;/strong&gt;
One of the simplest models with excitation and recovery enabling spiral
waves is the model by Barkley (&lt;a class="link" href="#ref-barkley1991model" &gt;1991&lt;/a&gt;). &lt;strong&gt;D.&lt;/strong&gt;
The model by Hodgkin &amp;amp; Huxley (&lt;a class="link" href="#ref-hodgkin1952quantitative" &gt;1952&lt;/a&gt;) of
the electrical conduction in giant nerve fibre of squids is one of the
first mathematical models of electrophysiology. Here, instead of a time
trace, we show a simulation of a single cell.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;An overview of the pre-defined models for cardiac electrophysiology is
given in Fig. &lt;a class="link" href="#fig:models" &gt;4&lt;/a&gt;. The simulations shown in this figure
have been performed using resolutions, timings and stimuli that, for
each model, are found using an automatic procedure, as they depend on
the model&amp;rsquo;s dynamics: time step &lt;code&gt;dt&lt;/code&gt;, grid spacing &lt;code&gt;dx&lt;/code&gt;, and the
stimulus amplitude $\Delta u$ to be applied in a
region by instantaneously increasing the first variable by the given
value. In the remainder of this section, we outline this automatic
procedure to find these parameters for a given cardiac electrophysiology
model. Python scripts for this procedure are also published as a
&lt;a class="link" href="https://gitlab.com/pigreads/figures" target="_blank" rel="noopener"
 &gt;separate, second repository&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:models"&gt;
&lt;p&gt;&lt;img alt="Models for cardiac electrophysiology that are pre-defined in Pigreads" class="gallery-image" data-flex-basis="200px" data-flex-grow="83" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2026/02/23/kabus2026pigreads/fig/main.png" srcset="https://kabus.eu/2026/02/23/kabus2026pigreads/fig/main_hu_8b3fc1d9abb0a880.png 800w, https://kabus.eu/2026/02/23/kabus2026pigreads/fig/main_hu_9c72552753dde335.png 1600w, https://kabus.eu/2026/02/23/kabus2026pigreads/fig/main.png 1674w" width="1674"&gt;&lt;/p&gt;
&lt;p&gt;Figure 4: &lt;strong&gt;Models for cardiac electrophysiology that are pre-defined in
Pigreads.&lt;/strong&gt; For each model, we present a the transmembrane voltage for a
simulation of a single cell of three pulses with different intervals
between the pulses and a 2D simulation of a spiral wave initiated with
an S0-S1-S2 protocol. See also the model overview in
Table &lt;strong&gt;¿tbl:models?&lt;/strong&gt;. &lt;strong&gt;A.&amp;ndash;E.&lt;/strong&gt; Phenomenological models. &lt;strong&gt;F.&amp;ndash;J.&lt;/strong&gt;
Models for atrial cells. &lt;strong&gt;K.&amp;ndash;O.&lt;/strong&gt; Models for ventricular cells.
&lt;strong&gt;Note:&lt;/strong&gt; The spiral wave is not necessarily stable in all models and
may break up into spiral chaos.&lt;/p&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First we must determine the time step &lt;code&gt;dt&lt;/code&gt; and the stimulus
$\Delta u$. We consider a large space of possible
values $(\mathtt{dt}, \Delta u) \in S \subset
 [{10}^{-8}, 0) \times [{10}^{-5}, {10}^{5}]$, in which we
run single-cell simulations (${{\bm{{D}}}} = 0$).
We then narrow down this search space $S$ to the
valid regime $S' \subset S$ of a single action
potential. We do so by checking these criteria:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Are all variables finite at all points in time?&lt;/li&gt;
&lt;li&gt;Does the first variable $u$ increase &lt;em&gt;and&lt;/em&gt;
decrease?&lt;/li&gt;
&lt;li&gt;Does $u$ oscillate less than five times?&lt;/li&gt;
&lt;li&gt;Does $u$ move away from the resting value?&lt;/li&gt;
&lt;li&gt;Does $u$ excite past the stimulated value?&lt;/li&gt;
&lt;li&gt;Does $u$ only change smoothly, i.e., without
large jumps?&lt;/li&gt;
&lt;li&gt;Does $u$ cover a large fraction of the
observed range of it across simulations?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We then pick &lt;code&gt;dt&lt;/code&gt; at the 80th percentile of valid simulations
$S'$, followed by $\Delta u$
at the 30th percentile of valid simulations at the chosen &lt;code&gt;dt&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We then run an additional single-cell simulation to determine the
action potential duration (APD), i.e., the time that
$u$ is above a 30% threshold.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;With a 1D simulation at a very fine grid spacing &lt;code&gt;dx&lt;/code&gt; obtained via
the CFL condition (&lt;a class="link" href="#ref-courant1928cfl" &gt;Courant et al., 1928&lt;/a&gt;), we
can then determine the conduction velocity (CV). Here, we for now
set the diffusivity ${{\bm{{D}}}} = 1$ without
loss of generality, as we can rescale it to any desired CV, as
outlined below.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We refine the values of CV and APD by measuring them for the third
stimulus in 1D simulations with critical timings of stimulation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In a series of 2D simulations at
${{\bm{{D}}}} = 1$, we determine the largest grid
spacing &lt;code&gt;dx&lt;/code&gt; such that the difference between the fastest and
slowest stimulation at some distance along the axes and diagonal to
them is less than 5%.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If necessary for numerical stability in 2D simulations, i.e., the
CFL condition, we reduce &lt;code&gt;dt&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The result of this automatic procedure is given in a tabular overview of
all pre-defined models in Pigreads in Table &lt;strong&gt;¿tbl:models?&lt;/strong&gt;. This table
includes references to the original publications of the models with
their number of variables &lt;code&gt;Nv&lt;/code&gt;, as well as the determined parameters for
discretisation, &lt;code&gt;dt&lt;/code&gt; and &lt;code&gt;dx&lt;/code&gt;, the stimulus strength
$\Delta u$, and resulting APD and CV at diffusivity
${{\bm{{D}}}} = 1$ in the units of the model. Note
that these parameters can be scaled to a desired velocity via:
&lt;span &gt;$$
D \propto \mathrm{CV}^2,
\quad
\mathtt{dx} \propto \mathrm{CV},
\quad
\mathtt{dt} = \text{const}.
\qquad{(4)}$$&lt;/span&gt; which follows for
Eq. &lt;a class="link" href="#eq:rd" &gt;1&lt;/a&gt; from keeping the velocity and diffusivity the same in
grid units, i.e.,
$D \cdot \mathtt{dt} / \mathtt{dx}^2$ and
$\mathrm{CV} \cdot \mathtt{dt}
/ \mathtt{dx}$ are both constant.&lt;/p&gt;
&lt;p&gt;In cardiac electrophysiology, stimuli in the form of instantaneous
changes in variables, like the provided $\Delta u$,
are considered less physically realistic than current-based stimuli
which take the form of a source term
${{\underline{{s}}}}$ in Eq. &lt;a class="link" href="#eq:rd" &gt;1&lt;/a&gt;. Usually, a
suitable amplitude of a current-based stimulus can be obtained by
spreading out the stimulus $\Delta u$ over some time
$T$: &lt;span &gt;$$
s_0 = \frac{\Delta u}{T}
\qquad{(5)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;While the provided stimulus amplitude $\Delta u$ and
resolutions in time and space work well in our tests, they may not be
optimal for all applications. The user may want to adjust them for their
specific use case.&lt;/p&gt;
&lt;div id="positioning-across-alternatives"&gt;
&lt;h1 id="positioning-across-alternatives"&gt;Positioning across alternatives
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Most solvers for cardiac electrophysiology have no or only partial GPU
support; these codes utilise parallelisation on large numbers of CPU
cores, for instance alphabetically: Alya Red (&lt;a class="link" href="#ref-alya" &gt;Vázquez et al.,
2016&lt;/a&gt;), BeatBox (&lt;a class="link" href="#ref-beatbox" &gt;Antonioletti et al., 2017&lt;/a&gt;),
CEPS (&lt;a class="link" href="#ref-ceps" &gt;Leguèbe et al., 2025&lt;/a&gt;), cbcbeat (&lt;a class="link" href="#ref-cbcbeat" &gt;E. Rognes et al.,
2017&lt;/a&gt;), Chaste (&lt;a class="link" href="#ref-chaste" &gt;Pitt-Francis et al., 2009&lt;/a&gt;),
Continuity (&lt;a class="link" href="#ref-continuity" &gt;Gonzales et al., 2016&lt;/a&gt;), fenicsx-beat (&lt;a class="link" href="#ref-fenicsx-beat" &gt;H.
Finsberg, 2025&lt;/a&gt;), FiniteWave (&lt;a class="link" href="#ref-finitewave" &gt;Nezlobinsky et al.,
2026&lt;/a&gt;), Ithildin (&lt;a class="link" href="#ref-ithildin" &gt;Kabus et al., 2024&lt;/a&gt;),
lifex-ep (&lt;a class="link" href="#ref-lifex-ep" &gt;Africa et al., 2023&lt;/a&gt;), openCARP (&lt;a class="link" href="#ref-opencarp" &gt;Plank et
al., 2021&lt;/a&gt;), OpenCMISS (&lt;a class="link" href="#ref-opencmiss" &gt;Bradley et al.,
2011&lt;/a&gt;), simcardems (&lt;a class="link" href="#ref-simcardems" &gt;H. N. T. Finsberg et al.,
2023&lt;/a&gt;), and svMultiPhysics (&lt;a class="link" href="#ref-simvascular" &gt;Updegrove et al.,
2016&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The solvers that use GPUs vary in terms of the numerical scheme,
backend, and language used for the API to set up numerical simulations:
Abubu.js is a finite-differences code using WebGL which is accessed via
JavaScript in a web browser (&lt;a class="link" href="#ref-abubu" &gt;Kaboudian et al., 2019&lt;/a&gt;);
CardioMat uses finite differences in the Matlab Parallel Computing
Toolbox (&lt;a class="link" href="#ref-cardiomat" &gt;Biasi et al., 2025&lt;/a&gt;); and MonoAlg3D is a
finite-volumes solver using MPI and CUDA that is interfaced with using
custom INI files containing parameters (&lt;a class="link" href="#ref-monoalg3d" &gt;Berg et al.,
2025&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Python&amp;rsquo;s robust packaging system, scientific libraries for numerical
computing, data visualisation, and machine learning, as well as its ease
of use, make it an attractive choice for developing scientific software.
There is another GPU-based cardiac electrophysiology solver developed
around the same time as Pigreads that also integrates well into the
Python ecosystem: TorchCor uses finite elements with the PyTorch deep
learning library (&lt;a class="link" href="#ref-torchcor" &gt;Zhou et al., 2026&lt;/a&gt;). Pigreads
fundamentally differs from this as it uses finite differences and OpenCL
as the backend. Due to the simpler numerical scheme and use of optimised
low-level OpenCL code, Pigreads is usually faster than TorchCor for the
same problem sizes. Pigreads solves the benchmark problem proposed by
Niederer et al. (&lt;a class="link" href="#ref-niederer2011verification" &gt;2011&lt;/a&gt;) around ten times
faster than TorchCor: On the same hardware, TorchCor computes the
solution in 9.2 s for the coarsest resolution, and 264 s for the finest
resolution. For Pigreads&amp;rsquo; performance, see section &lt;a class="link" href="#sec:tech" &gt;3&lt;/a&gt;.&lt;/p&gt;
&lt;div id="outlook"&gt;
&lt;h1 id="outlook"&gt;Outlook
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;While we here have focused on cardiac electrophysiology, Pigreads can be
used for reaction-diffusion systems in general. Due to its simple API,
it is easy to use and integrate into existing Python code, enabling
researchers to build on a solid foundation. We envision that Pigreads
will be used in the future for parameter estimation, inverse problems,
uncertainty quantification, sensitivity analysis, and model reduction.
It could also be integrated into clinical workflows for personalised
medicine.&lt;/p&gt;
&lt;p&gt;Its nature as a Python module also facilitates building, for instance,
an interactive graphical user interface or a web application on top of
it. This would make it even more accessible to a wider audience, for
instance, to researchers without programming experience. We are
including a proof-of-concept interactive demo in the Python module
allowing to attempt to terminate atrial fibrillation, i.e., spiral
chaos, by tapping a touch screen.&lt;/p&gt;
&lt;p&gt;As new models can easily be defined, another use case is designing,
fitting, and testing new models. The module could also be used for
educational purposes, for instance in courses on mathematical biology,
dynamical systems, or scientific computing.&lt;/p&gt;
&lt;p&gt;While Pigreads could be extended in various ways &amp;ndash; for instance more
advanced time stepping methods, adaptive mesh refinement, support for
more complex geometries, or other kinds of governing equations &amp;ndash; we
have chosen to keep the module minimal to keep it as stable as possible.
While we are open to receive pull requests of minor tweaks, bugfixes,
and additional model definitions and geometry files, no additional
features should be added unless they are absolutely necessary. There is
always the possibility to fork the project and add additional features
if needed, for instance, on a per-project basis.&lt;/p&gt;
&lt;p&gt;We hope that Pigreads will be a useful tool for researchers across
various fields of science and that it will enable scientific progress.&lt;/p&gt;
&lt;div id="data-availability"&gt;
&lt;h1 id="data-availability"&gt;Data availability
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Pigreads can be installed from
&lt;a class="link" href="https://pypi.org/project/pigreads" target="_blank" rel="noopener"
 &gt;PyPI&lt;/a&gt;. The source code is available
on &lt;a class="link" href="https://gitlab.com/pigreads/pigreads" target="_blank" rel="noopener"
 &gt;GitLab&lt;/a&gt;, and its documentation
on &lt;a class="link" href="https://pigreads.readthedocs.io" target="_blank" rel="noopener"
 &gt;Read the Docs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Scripts to generate the figures and data presented in this manuscript
are available in a &lt;a class="link" href="https://gitlab.com/pigreads/figures" target="_blank" rel="noopener"
 &gt;separate Git
repository&lt;/a&gt;.&lt;/p&gt;
&lt;div &gt;
&lt;h1 id="addenda"&gt;Addenda
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Acknowledgments:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DK would like to thank Martina Chirilus-Bruckner and Daniël Pijnappels
for inspiring discussions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Declaration of generative AI and AI-assisted technologies in the
manuscript preparation process.&lt;/strong&gt; During the preparation of this work
the authors used &lt;a class="link" href="https://chatgpt.com" target="_blank" rel="noopener"
 &gt;ChatGPT&lt;/a&gt; and &lt;a class="link" href="https://github.com/features/copilot" target="_blank" rel="noopener"
 &gt;GitHub
Copilot&lt;/a&gt; in order to help with
writing the manuscript and minor parts of the code. After using these
tools, the authors reviewed and edited the content as needed and take
full responsibility for the content of the published article.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Funding:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This work was supported by the Netherlands Organisation for Scientific
Research (NWO Open Mind grant 2025/TTW/02025375 to TDC). DK was
supported by KU Leuven grant GPUL/20/012, and the Society, Artificial
Intelligence and Life Sciences (SAILS) initiative of Leiden University.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Competing interests:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The authors have declared that no competing interests exist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Author contributions:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DK:&lt;/strong&gt;
Conceptualization, Methodology, Software, Validation, Formal analysis, Investigation, Resources, Data Curation, Writing &amp;ndash; Original Draft, Writing &amp;ndash; Review &amp;amp; Editing, Visualization. &lt;strong&gt;HD:&lt;/strong&gt;
Writing &amp;ndash; Review &amp;amp; Editing, Supervision. &lt;strong&gt;TDC:&lt;/strong&gt;
Conceptualization, Writing &amp;ndash; Review &amp;amp; Editing, Supervision, Project administration, Funding acquisition.
&lt;div &gt;&lt;/p&gt;
&lt;h1 id="references"&gt;References
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="refs" class="references csl-bib-body hanging-indent" entry-spacing="0" line-spacing="2"&gt;
&lt;div id="ref-lifex-ep" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Africa, P. C., Piersanti, R., Regazzoni, F., Bucelli, M., Salvador, M.,
Fedele, M., Pagani, S., Dede&amp;rsquo;, L., &amp;amp; Quarteroni, A. (2023).
&lt;span class="nocase"&gt;lifex-ep&lt;/span&gt;:
A robust and efficient software for cardiac electrophysiology
simulations. &lt;em&gt;BMC Bioinformatics&lt;/em&gt;, &lt;em&gt;24&lt;/em&gt;(1).
&lt;a class="link" href="https://doi.org/10.1186/s12859-023-05513-8" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1186/s12859-023-05513-8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-beatbox" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Antonioletti, M., Biktashev, V. N., Jackson, A., Kharche, S. R., Stary,
T., &amp;amp; Biktasheva, I. V. (2017).
&lt;span &gt;BeatBox&lt;/span&gt;&amp;ndash;&lt;span &gt;HPC&lt;/span&gt;
simulation environment for biophysically and anatomically realistic
cardiac electrophysiology. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(5), e0172292.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0172292" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0172292&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-barkley1991model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Barkley, D. (1991). A model for fast computer simulation of waves in
excitable media. &lt;em&gt;Physica D: Nonlinear Phenomena&lt;/em&gt;, &lt;em&gt;49&lt;/em&gt;(1&amp;ndash;2), 61&amp;ndash;70.
&lt;a class="link" href="https://doi.org/10.1016/0167-2789%2891%2990194-e" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0167-2789(91)90194-e&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-monoalg3d" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Berg, L. A., Oliveira, R. S., Camps, J., Wang, Z. J., Doste, R.,
Bueno-Orovio, A., Santos, R. W. dos, &amp;amp; Rodriguez, B. (2025).
&lt;em&gt;&lt;span &gt;MonoAlg3D&lt;/span&gt;: Enabling
cardiac electrophysiology digital twins with an efficient open source
scalable solver on GPU clusters&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.1101/2025.04.09.647733" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1101/2025.04.09.647733&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cardiomat" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Biasi, N., Seghetti, P., Parollo, M., Zucchelli, G., &amp;amp; Tognetti, A.
(2025). A &lt;span &gt;Matlab&lt;/span&gt;
toolbox for cardiac electrophysiology simulations on patient-specific
geometries. &lt;em&gt;Computers in Biology and Medicine&lt;/em&gt;, &lt;em&gt;185&lt;/em&gt;, 109529.
&lt;a class="link" href="https://doi.org/10.1016/j.compbiomed.2024.109529" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.compbiomed.2024.109529&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-opencmiss" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bradley, C., Bowery, A., Britten, R., Budelmann, V., Camara, O.,
Christie, R., Cookson, A., Frangi, A. F., Gamage, T. B., Heidlauf, T.,
Krittian, S., Ladd, D., Little, C., Mithraratne, K., Nash, M.,
Nickerson, D., Nielsen, P., Nordbø, Ø., Omholt, S., Pashaei, A.,
Paterson, D., Rajagopal, V., Reeve, A., Röhrle, O., Safaei, S.,
Sebastián, R., Steghöfer, M., Wu, T., Yu, T., Zhang, H., &amp;amp; Hunter, P.
(2011). &lt;span &gt;OpenCMISS&lt;/span&gt;: A
multi-physics &amp;amp; multi-scale computational infrastructure for the
&lt;span &gt;VPH/Physiome&lt;/span&gt;
project. &lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;, &lt;em&gt;107&lt;/em&gt;(1),
32&amp;ndash;47. &lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2011.06.015" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2011.06.015&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cannon2014neurosystems" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cannon, J., McCarthy, M. M., Lee, S., Lee, J., Börgers, C., Whittington,
M. A., &amp;amp; Kopell, N. (2014). Neurosystems: Brain rhythms and cognitive
processing. &lt;em&gt;European Journal of Neuroscience&lt;/em&gt;, &lt;em&gt;39&lt;/em&gt;(5), 705&amp;ndash;719.
&lt;a class="link" href="https://doi.org/10.1111/ejn.12453" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1111/ejn.12453&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clayton2011review" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clayton, R., Bernus, O., Cherry, E. M., Dierckx, H., Fenton, F. H.,
Mirabella, L., Panfilov, A. V., Sachse, F. B., Seemann, G., &amp;amp; Zhang, H.
(2011). Models of cardiac tissue electrophysiology: Progress, challenges
and open questions. &lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;,
&lt;em&gt;104&lt;/em&gt;(1-3), 22&amp;ndash;48. &lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2010.05.008" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2010.05.008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clerx2016myokit" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clerx, M., Collins, P., De Lange, E., &amp;amp; Volders, P. G. (2016). Myokit: A
simple interface to cardiac cellular electrophysiology. &lt;em&gt;Progress in
Biophysics and Molecular Biology&lt;/em&gt;, &lt;em&gt;120&lt;/em&gt;(1-3), 100&amp;ndash;114.
&lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2015.12.008" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2015.12.008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clerx2020cellml" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clerx, M., Cooling, M. T., Cooper, J., Garny, A., Moyle, K., Nickerson,
D. P., Nielsen, P. M., &amp;amp; Sorby, H. (2020). CellML 2.0. &lt;em&gt;Journal of
Integrative Bioinformatics&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;(2-3), 20200021.
&lt;a class="link" href="https://doi.org/10.1515/jib-2020-0021" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1515/jib-2020-0021&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-courant1928cfl" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Courant, R., Friedrichs, K., &amp;amp; Lewy, H. (1928).
&lt;span &gt;Über die partiellen Differenzengleichungen der
mathematischen Physik&lt;/span&gt;. &lt;em&gt;Mathematische
Annalen&lt;/em&gt;, &lt;em&gt;100&lt;/em&gt;(1), 32&amp;ndash;74. &lt;a class="link" href="https://doi.org/10.1007/BF01448839" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/BF01448839&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-courtemanche1998ionic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Courtemanche, M., Ramirez, R. J., &amp;amp; Nattel, S. (1998). Ionic mechanisms
underlying human atrial action potential properties: Insights from a
mathematical model. &lt;em&gt;American Journal of Physiology-Heart and
Circulatory Physiology&lt;/em&gt;, &lt;em&gt;275&lt;/em&gt;(1), H301&amp;ndash;H321.
&lt;a class="link" href="https://doi.org/10.1152/ajpheart.1998.275.1.h301" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.1998.275.1.h301&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-decoster2018myocyte" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;De Coster, T., Claus, P., Seemann, G., Willems, R., Sipido, K. R., &amp;amp;
Panfilov, A. V. (2018). Myocyte remodeling due to fibro-fatty
infiltrations influences arrhythmogenicity. &lt;em&gt;Frontiers in Physiology&lt;/em&gt;,
&lt;em&gt;9&lt;/em&gt;. &lt;a class="link" href="https://doi.org/10.3389/fphys.2018.01381" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fphys.2018.01381&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-decoster2018myocyte1" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Dossel, O., Krueger, M. W., Weber, F. M., Schilling, C., Schulze, W. H.
W., &amp;amp; Seemann, G. (2011). A framework for personalization of
computational models of the human atria. &lt;em&gt;2011 Annual International
Conference of the IEEE Engineering in Medicine and Biology Society&lt;/em&gt;,
4324&amp;ndash;4328. &lt;a class="link" href="https://doi.org/10.1109/iembs.2011.6091073" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/iembs.2011.6091073&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cbcbeat" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;E. Rognes, M., E. Farrell, P., W. Funke, S., E. Hake, J., &amp;amp; M. C.
Maleckar, M. (2017).
&lt;span class="nocase"&gt;cbcbeat&lt;/span&gt;:
An adjoint-enabled framework for computational cardiac
electrophysiology. &lt;em&gt;The Journal of Open Source Software&lt;/em&gt;, &lt;em&gt;2&lt;/em&gt;(13), 224.
&lt;a class="link" href="https://doi.org/10.21105/joss.00224" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.00224&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fenicsx-beat" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Finsberg, H. (2025).
&lt;span class="nocase"&gt;fenicsx-beat&lt;/span&gt; -
an open source simulation framework for cardiac electrophysiology.
&lt;em&gt;Journal of Open Source Software&lt;/em&gt;, &lt;em&gt;10&lt;/em&gt;(114), 8416.
&lt;a class="link" href="https://doi.org/10.21105/joss.08416" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.08416&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-simcardems" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Finsberg, H. N. T., Herck, I. G. M. van, Daversin-Catty, C., Arevalo,
H., &amp;amp; Wall, S. (2023).
&lt;span class="nocase"&gt;simcardems&lt;/span&gt;:
A &lt;span &gt;FEniCS&lt;/span&gt;-based
cardiac electro-mechanics solver. &lt;em&gt;Journal of Open Source Software&lt;/em&gt;,
&lt;em&gt;8&lt;/em&gt;(81), 4753. &lt;a class="link" href="https://doi.org/10.21105/joss.04753" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.04753&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fitzhugh1961impulses" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;FitzHugh, R. (1961). Impulses and physiological states in theoretical
models of nerve membrane. &lt;em&gt;Biophysical Journal&lt;/em&gt;, &lt;em&gt;1&lt;/em&gt;(6), 445&amp;ndash;466.
&lt;a class="link" href="https://doi.org/10.1016/s0006-3495%2861%2986902-6" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/s0006-3495(61)86902-6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-continuity" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gonzales, M., Guthals, A., Kerckhoffs, R., Krishnamurthy, A., Lionetti,
F., Van Dorn, J., Villongco, C., Vincent, K., &amp;amp; McCulloch, A. (2016).
&lt;em&gt;&lt;span &gt;Continuity&lt;/span&gt;: A
problem-solving environment for multiscale biological modeling&lt;/em&gt;
[Computer software]. Cardiac Mechanics Research Group; University of
California, San Diego. &lt;a class="link" href="https://continuity.ucsd.edu" target="_blank" rel="noopener"
 &gt;https://continuity.ucsd.edu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gray1983autocatalytic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gray, P., &amp;amp; Scott, S. K. (1983). Autocatalytic reactions in the
isothermal, continuous stirred tank reactor. &lt;em&gt;Chemical Engineering
Science&lt;/em&gt;, &lt;em&gt;38&lt;/em&gt;(1), 29&amp;ndash;43.
&lt;a class="link" href="https://doi.org/10.1016/0009-2509%2883%2980132-8" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0009-2509(83)80132-8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-numpy" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Harris, C. R., Millman, K. J., Walt, S. J. van der, Gommers, R.,
Virtanen, P., Cournapeau, D., Wieser, E., Taylor, J., Berg, S., Smith,
N. J., Kern, R., Picus, M., Hoyer, S., Kerkwijk, M. H. van, Brett, M.,
Haldane, A., Río, J. F. del, Wiebe, M., Peterson, P., Gérard-Marchant,
P., Sheppard, K., Reddy, T., Weckesser, W., Abbasi, H., Gohlke, C., &amp;amp;
Oliphant, T. E. (2020). Array programming with
&lt;span &gt;NumPy&lt;/span&gt;. &lt;em&gt;Nature&lt;/em&gt;,
&lt;em&gt;585&lt;/em&gt;(7825), 357&amp;ndash;362. &lt;a class="link" href="https://doi.org/10.1038/s41586-020-2649-2" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41586-020-2649-2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-hodgkin1952quantitative" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hodgkin, A. L., &amp;amp; Huxley, A. F. (1952). A quantitative description of
membrane current and its application to conduction and excitation in
nerve. &lt;em&gt;The Journal of Physiology&lt;/em&gt;, &lt;em&gt;117&lt;/em&gt;(4), 500&amp;ndash;544.
&lt;a class="link" href="https://doi.org/10.1113/jphysiol.1952.sp004764" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1113/jphysiol.1952.sp004764&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-hren1996realistic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hren, R. (1996). &lt;em&gt;A realistic model of the human ventricular myocardium:
Application to the study of ectopic activation.&lt;/em&gt; [PhD thesis, Dalhousie
University]. &lt;a class="link" href="https://dalspace.library.dal.ca//handle/10222/55139" target="_blank" rel="noopener"
 &gt;https://dalspace.library.dal.ca//handle/10222/55139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-hren1996realistic2" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hren, R. (1998). Value of epicardial potential maps in localizing
pre-excitation sites for radiofrequency ablation. A simulation study.
&lt;em&gt;Physics in Medicine and Biology&lt;/em&gt;, &lt;em&gt;43&lt;/em&gt;(6), 1449&amp;ndash;1468.
&lt;a class="link" href="https://doi.org/10.1088/0031-9155/43/6/006" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1088/0031-9155/43/6/006&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-matplotlib" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hunter, J. D. (2007). Matplotlib: A
&lt;span &gt;2D&lt;/span&gt; graphics
environment. &lt;em&gt;Computing in Science &amp;amp; Engineering&lt;/em&gt;, &lt;em&gt;9&lt;/em&gt;(3), 90&amp;ndash;95.
&lt;a class="link" href="https://doi.org/10.1109/MCSE.2007.55" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/MCSE.2007.55&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-abubu" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kaboudian, A., Cherry, E. M., &amp;amp; Fenton, F. H. (2019). Real-time
interactive simulations of large-scale systems on personal computers and
cell phones: Toward patient-specific heart modeling and other
applications. &lt;em&gt;Science Advances&lt;/em&gt;, &lt;em&gt;5&lt;/em&gt;(3).
&lt;a class="link" href="https://doi.org/10.1126/sciadv.aav6019" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1126/sciadv.aav6019&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-ithildin" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Cloet, M., Zemlin, C., Bernus, O., &amp;amp; Dierckx, H. (2024). The
&lt;span &gt;Ithildin&lt;/span&gt; library for
efficient numerical solution of anisotropic reaction-diffusion problems
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;19&lt;/em&gt;(9), 1&amp;ndash;26.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0303674" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0303674&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kapral1995chemical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kapral, R., &amp;amp; Showalter, R. (1995). &lt;em&gt;Chemical waves and patterns&lt;/em&gt;.
Kluwer.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-hren1996realistic1" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Keldermann, R. H., ten Tusscher, K. H. W. J., Nash, M. P., Bradley, C.
P., Hren, R., Taggart, P., &amp;amp; Panfilov, A. V. (2009). A computational
study of mother rotor VF in the human ventricles. &lt;em&gt;American Journal of
Physiology-Heart and Circulatory Physiology&lt;/em&gt;, &lt;em&gt;296&lt;/em&gt;(2), H370&amp;ndash;H379.
&lt;a class="link" href="https://doi.org/10.1152/ajpheart.00952.2008" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.00952.2008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-pyopencl" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Klöckner, A., Pinto, N., Lee, Y., Catanzaro, B., Ivanov, P., &amp;amp; Fasih, A.
(2012). &lt;span &gt;PyCUDA&lt;/span&gt; and
&lt;span &gt;PyOpenCL&lt;/span&gt;: A
scripting-based approach to
&lt;span &gt;GPU&lt;/span&gt; run-time code
generation. &lt;em&gt;Parallel Computing&lt;/em&gt;, &lt;em&gt;38&lt;/em&gt;(3), 157&amp;ndash;174.
&lt;a class="link" href="https://doi.org/10.1016/j.parco.2011.09.001" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.parco.2011.09.001&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-lechleiter1991spiral" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Lechleiter, J., Girard, S., Peralta, E., &amp;amp; Clapham, D. (1991). Spiral
calcium wave propagation and annihilation in xenopus laevis oocytes.
&lt;em&gt;Science&lt;/em&gt;, &lt;em&gt;252&lt;/em&gt;(5002), 123&amp;ndash;126.
&lt;a class="link" href="https://doi.org/10.1126/science.2011747" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1126/science.2011747&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-ceps" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Leguèbe, M., Coudière, Y., Calvez, L., Pannetier, V., Douanla-Lontsi,
C., Davidović, A., Bécue, P.-E., Juhoor, M., &amp;amp; Zemzemi, N. (2025).
&lt;span &gt;CEPS&lt;/span&gt;: A cardiac
electrophysiology exploration tool for new mathematical models and
methods. &lt;em&gt;Journal of Open Source Software&lt;/em&gt;, &lt;em&gt;10&lt;/em&gt;(114), 8910.
&lt;a class="link" href="https://doi.org/10.21105/joss.08910" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.08910&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-marcotte2017dynamical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Marcotte, C. D., &amp;amp; Grigoriev, R. O. (2017). Dynamical mechanism of
atrial fibrillation: A topological approach. &lt;em&gt;Chaos: An
Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;27&lt;/em&gt;(9).
&lt;a class="link" href="https://doi.org/10.1063/1.5003259" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.5003259&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-murray1976travelling" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Murray, J. (1976). On travelling wave solutions in a model for the
belousov-zhabotinskii reaction. &lt;em&gt;Journal of Theoretical Biology&lt;/em&gt;,
&lt;em&gt;56&lt;/em&gt;(2), 329&amp;ndash;353. &lt;a class="link" href="https://doi.org/10.1016/S0022-5193%2876%2980078-1" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/S0022-5193(76)80078-1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-nagumo1962active" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Nagumo, J., Arimoto, S., &amp;amp; Yoshizawa, S. (1962). An active pulse
transmission line simulating nerve axon. &lt;em&gt;Proceedings of the
&lt;span &gt;IRE&lt;/span&gt;&lt;/em&gt;, &lt;em&gt;50&lt;/em&gt;(10),
2061&amp;ndash;2070. &lt;a class="link" href="https://doi.org/10.1109/jrproc.1962.288235" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/jrproc.1962.288235&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-yaml" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Net, T. A. A. döt, Ingy AND Müller. (2023). &lt;em&gt;YAML ain&amp;rsquo;t markup language,
revision 1.2.2&lt;/em&gt;. YAML Language Development Team.
&lt;a class="link" href="https://yaml.org/spec/1.2.2/" target="_blank" rel="noopener"
 &gt;https://yaml.org/spec/1.2.2/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-finitewave" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Nezlobinsky, T., Okenov, A., Vandersickel, N., &amp;amp; Panfilov, A. V. (2026).
&lt;em&gt;&lt;span &gt;Finitewave&lt;/span&gt;: A
lightweight and accessible framework for cardiac electrophysiology
simulations&lt;/em&gt; [Computer software]. Ghent University, Belgium.
&lt;a class="link" href="https://github.com/finitewave/Finitewave" target="_blank" rel="noopener"
 &gt;https://github.com/finitewave/Finitewave&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-niederer2011verification" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Niederer, S. A., Kerfoot, E., Benson, A. P., Bernabeu, M. O., Bernus,
O., Bradley, C., Cherry, E. M., Clayton, R., Fenton, F. H., Garny, A.,
Heidenreich, E., Land, S., Maleckar, M., Pathmanathan, P., Plank, G.,
Rodríguez, J. F., Roy, I., Sachse, F. B., Seemann, G., Skavhaug, O., &amp;amp;
Smith, N. P. (2011). Verification of cardiac tissue electrophysiology
simulators using an
&lt;span class="nocase"&gt;N-version&lt;/span&gt;
benchmark. &lt;em&gt;Philosophical Transactions of the Royal Society A:
Mathematical, Physical and Engineering Sciences&lt;/em&gt;, &lt;em&gt;369&lt;/em&gt;(1954),
4331&amp;ndash;4351. &lt;a class="link" href="https://doi.org/10.1098/rsta.2011.0139" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1098/rsta.2011.0139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-chaste" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Pitt-Francis, J., Pathmanathan, P., Bernabeu, M. O., Bordas, R., Cooper,
J., Fletcher, A. G., Mirams, G. R., Murray, P., Osborne, J. M., Walter,
A., Chapman, S. J., Garny, A., Leeuwen, I. M. M. van, Maini, P. K.,
Rodríguez, B., Waters, S. L., Whiteley, J. P., Byrne, H. M., &amp;amp; Gavaghan,
D. J. (2009).
&lt;span &gt;Chaste&lt;/span&gt;: A
test-driven approach to software development for biological modelling.
&lt;em&gt;Computer Physics Communications&lt;/em&gt;, &lt;em&gt;180&lt;/em&gt;(12), 2452&amp;ndash;2471.
&lt;a class="link" href="https://doi.org/10.1016/j.cpc.2009.07.019" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.cpc.2009.07.019&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-opencarp" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Plank, G., Loewe, A., Neic, A., Augustin, C., Huang, Y.-L., Gsell, M. A.
F., Karabelas, E., Nothstein, M., Prassl, A. J., Sánchez, J., Seemann,
G., &amp;amp; Vigmond, E. J. (2021). The
&lt;span class="nocase"&gt;openCARP&lt;/span&gt;
simulation environment for cardiac electrophysiology. &lt;em&gt;Computer Methods
and Programs in Biomedicine&lt;/em&gt;, &lt;em&gt;208&lt;/em&gt;, 106223.
&lt;a class="link" href="https://doi.org/10.1016/j.cmpb.2021.106223" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.cmpb.2021.106223&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-rotermund1990imaging" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Rotermund, H.-H., Engel, W., Kordesch, M., &amp;amp; Ertl, G. (1990). Imaging of
spatio-temporal pattern evolution during carbon monoxide oxidation on
platinum. &lt;em&gt;Nature&lt;/em&gt;, &lt;em&gt;343&lt;/em&gt;(6256), 355&amp;ndash;357.
&lt;a class="link" href="https://doi.org/10.1038/343355a0" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/343355a0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-opencl" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Stone, J. E., Gohara, D., &amp;amp; Shi, G. (2010). OpenCL: A parallel
programming standard for heterogeneous computing systems. &lt;em&gt;Computing in
Science &amp;amp; Engineering&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(3), 66&amp;ndash;73.
&lt;a class="link" href="https://doi.org/10.1109/MCSE.2010.69" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/MCSE.2010.69&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-pyvista" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Sullivan, B., &amp;amp; Kaszynski, A. (2019).
&lt;span &gt;PyVista&lt;/span&gt;:
&lt;span &gt;3D&lt;/span&gt; plotting and mesh
analysis through a streamlined interface for the
&lt;span &gt;Visualization
Toolkit&lt;/span&gt;
(&lt;span &gt;VTK&lt;/span&gt;). &lt;em&gt;Journal of
Open Source Software&lt;/em&gt;, &lt;em&gt;4&lt;/em&gt;(37), 1450.
&lt;a class="link" href="https://doi.org/10.21105/joss.01450" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.01450&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-tentusscher2006alternans" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ten Tusscher, K. H. W. J., &amp;amp; Panfilov, A. V. (2006). Alternans and
spiral breakup in a human ventricular tissue model. &lt;em&gt;American Journal of
Physiology-Heart and Circulatory Physiology&lt;/em&gt;, &lt;em&gt;291&lt;/em&gt;(3), H1088&amp;ndash;H1100.
&lt;a class="link" href="https://doi.org/10.1152/ajpheart.00109.2006" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.00109.2006&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-simvascular" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Updegrove, A., Wilson, N. M., Merkow, J., Lan, H., Marsden, A. L., &amp;amp;
Shadden, S. C. (2016).
&lt;span &gt;SimVascular&lt;/span&gt;: An open
source pipeline for cardiovascular simulation. &lt;em&gt;Annals of Biomedical
Engineering&lt;/em&gt;, &lt;em&gt;45&lt;/em&gt;(3), 525&amp;ndash;541.
&lt;a class="link" href="https://doi.org/10.1007/s10439-016-1762-8" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/s10439-016-1762-8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-python" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;van Rossum, G., Drake, F. L., et al. (1995). &lt;em&gt;The
&lt;span &gt;Python&lt;/span&gt; programming
language&lt;/em&gt;. Centrum voor Wiskunde en Informatica Amsterdam.
&lt;a class="link" href="https://www.python.org" target="_blank" rel="noopener"
 &gt;https://www.python.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-alya" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Vázquez, M., Houzeaux, G., Koric, S., Artigues, A., Aguado-Sierra, J.,
Arís, R., Mira, D., Calmet, H., Cucchietti, F., Owen, H., Taha, A.,
Burness, E. D., Cela, J. M., &amp;amp; Valero, M. (2016).
&lt;span &gt;Alya&lt;/span&gt;: Multiphysics
engineering simulation toward exascale. &lt;em&gt;Journal of Computational
Science&lt;/em&gt;, &lt;em&gt;14&lt;/em&gt;, 15&amp;ndash;27. &lt;a class="link" href="https://doi.org/10.1016/j.jocs.2015.12.007" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jocs.2015.12.007&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-torchcor" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Zhou, B., Balmus, M., Corrado, C., Cicci, L., Qian, S., &amp;amp; Niederer, S.
A. (2026). &lt;span &gt;TorchCor&lt;/span&gt;:
High-performance cardiac electrophysiology simulations with the finite
element method on GPUs. &lt;em&gt;SoftwareX&lt;/em&gt;, &lt;em&gt;33&lt;/em&gt;, 102521.
&lt;a class="link" href="https://doi.org/10.1016/j.softx.2027.102521" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.softx.2027.102521&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;</description></item><item><title>Calendar of travel photos 2025</title><link>https://kabus.eu/2025/12/26/calendar/</link><pubDate>Fri, 26 Dec 2025 20:00:00 +0100</pubDate><guid>https://kabus.eu/2025/12/26/calendar/</guid><description>&lt;img src="https://kabus.eu/2025/12/26/calendar/00.jpg" alt="Featured image of post Calendar of travel photos 2025" /&gt;&lt;p&gt;&lt;strong&gt;Cover photo:&lt;/strong&gt; Hapynionbrug, Leiden, Nederland&lt;/p&gt;
&lt;p&gt;&lt;img alt="Sint Salvatorshof, Leiden, Nederland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/01.jpg" srcset="https://kabus.eu/2025/12/26/calendar/01_hu_234bbf7f25a4e672.jpg 800w, https://kabus.eu/2025/12/26/calendar/01_hu_ca201e58227ea7d4.jpg 1600w, https://kabus.eu/2025/12/26/calendar/01_hu_688ad5a4ff3aa92f.jpg 2400w, https://kabus.eu/2025/12/26/calendar/01.jpg 3000w" width="3000"&gt;
&lt;img alt="Tegernsee, Bayern, Deutschland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/02.jpg" srcset="https://kabus.eu/2025/12/26/calendar/02_hu_2bfbedb0787443d2.jpg 800w, https://kabus.eu/2025/12/26/calendar/02_hu_4d05970b24530ee2.jpg 1600w, https://kabus.eu/2025/12/26/calendar/02_hu_afef5116d094cf7a.jpg 2400w, https://kabus.eu/2025/12/26/calendar/02.jpg 3000w" width="3000"&gt;
&lt;img alt="Python, Efteling, Nederland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/03.jpg" srcset="https://kabus.eu/2025/12/26/calendar/03_hu_35a4dadbec4b58da.jpg 800w, https://kabus.eu/2025/12/26/calendar/03_hu_975b451624c378db.jpg 1600w, https://kabus.eu/2025/12/26/calendar/03_hu_92b77b2d2a29fc74.jpg 2400w, https://kabus.eu/2025/12/26/calendar/03.jpg 3000w" width="3000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Het Rif, Waddenzee, Nederland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/04.jpg" srcset="https://kabus.eu/2025/12/26/calendar/04_hu_933833f634174300.jpg 800w, https://kabus.eu/2025/12/26/calendar/04_hu_2d1ca3958f397e8a.jpg 1600w, https://kabus.eu/2025/12/26/calendar/04_hu_474200a6e4c56097.jpg 2400w, https://kabus.eu/2025/12/26/calendar/04.jpg 3000w" width="3000"&gt;
&lt;img alt="Dinkelsbühl, Bayern, Deutschland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/05.jpg" srcset="https://kabus.eu/2025/12/26/calendar/05_hu_1a7bc1ea7d8a13db.jpg 800w, https://kabus.eu/2025/12/26/calendar/05_hu_acb572ddfbbcefb4.jpg 1600w, https://kabus.eu/2025/12/26/calendar/05_hu_e82b6cccf39f6d12.jpg 2400w, https://kabus.eu/2025/12/26/calendar/05.jpg 3000w" width="3000"&gt;
&lt;img alt="Arenbergkasteel, Leuven, België" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/06.jpg" srcset="https://kabus.eu/2025/12/26/calendar/06_hu_1356f4e4a91678f8.jpg 800w, https://kabus.eu/2025/12/26/calendar/06_hu_2bc810f3d7a85480.jpg 1600w, https://kabus.eu/2025/12/26/calendar/06_hu_658ac7b77bac60c1.jpg 2400w, https://kabus.eu/2025/12/26/calendar/06.jpg 3000w" width="3000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Θεσσαλονίκη, Ελλάδα (Thessaloniki, Greece)" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/07.jpg" srcset="https://kabus.eu/2025/12/26/calendar/07_hu_a89648192d303f07.jpg 800w, https://kabus.eu/2025/12/26/calendar/07_hu_ba9607af7a5e5f30.jpg 1600w, https://kabus.eu/2025/12/26/calendar/07_hu_96e927c77dac04ee.jpg 2400w, https://kabus.eu/2025/12/26/calendar/07.jpg 3000w" width="3000"&gt;
&lt;img alt="Königsstuhl, Rügen, Deutschland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/08.jpg" srcset="https://kabus.eu/2025/12/26/calendar/08_hu_c8bd21a5dd23346b.jpg 800w, https://kabus.eu/2025/12/26/calendar/08_hu_fffbf65ef9561f96.jpg 1600w, https://kabus.eu/2025/12/26/calendar/08_hu_2dcd225f6d92d1.jpg 2400w, https://kabus.eu/2025/12/26/calendar/08.jpg 3000w" width="3000"&gt;
&lt;img alt="Hortus Botanicus, Leiden, Nederland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/09.jpg" srcset="https://kabus.eu/2025/12/26/calendar/09_hu_f27a5ac6affa2dd1.jpg 800w, https://kabus.eu/2025/12/26/calendar/09_hu_b68d90518c9eb2a4.jpg 1600w, https://kabus.eu/2025/12/26/calendar/09_hu_365475ea2edee1af.jpg 2400w, https://kabus.eu/2025/12/26/calendar/09.jpg 3000w" width="3000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Japanse Tuin, Leiden, Nederland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/10.jpg" srcset="https://kabus.eu/2025/12/26/calendar/10_hu_da450309f5e8393c.jpg 800w, https://kabus.eu/2025/12/26/calendar/10_hu_60e345229bc2bd68.jpg 1600w, https://kabus.eu/2025/12/26/calendar/10_hu_c2f7b30a4e925fed.jpg 2400w, https://kabus.eu/2025/12/26/calendar/10.jpg 3000w" width="3000"&gt;
&lt;img alt="Sassnitz, Rügen, Deutschland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/11.jpg" srcset="https://kabus.eu/2025/12/26/calendar/11_hu_1603df26455f54a5.jpg 800w, https://kabus.eu/2025/12/26/calendar/11_hu_bfa5dfee9fa241db.jpg 1600w, https://kabus.eu/2025/12/26/calendar/11_hu_3e4d338fddb02325.jpg 2400w, https://kabus.eu/2025/12/26/calendar/11.jpg 3000w" width="3000"&gt;
&lt;img alt="Molen De Valk, Leiden, Nederland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/12/26/calendar/12.jpg" srcset="https://kabus.eu/2025/12/26/calendar/12_hu_27ddb220428e017c.jpg 800w, https://kabus.eu/2025/12/26/calendar/12_hu_75bb7594b1d8ae4b.jpg 1600w, https://kabus.eu/2025/12/26/calendar/12_hu_939742d4408a9167.jpg 2400w, https://kabus.eu/2025/12/26/calendar/12.jpg 3000w" width="3000"&gt;&lt;/p&gt;</description></item><item><title>PhD Defence of Desmond Kabus</title><link>https://kabus.eu/2025/06/10/defence/</link><pubDate>Tue, 10 Jun 2025 10:00:00 +0200</pubDate><guid>https://kabus.eu/2025/06/10/defence/</guid><description>&lt;img src="https://kabus.eu/2025/06/10/defence/cover.jpg" alt="Featured image of post PhD Defence of Desmond Kabus" /&gt;&lt;p&gt;My PhD defence has taken place on &lt;strong&gt;10 June 2025, 10:00&lt;/strong&gt; at the &lt;a class="link" href="https://maps.app.goo.gl/PnVAUvg8JBYaZuRB9" target="_blank" rel="noopener"
 &gt;Arenberg
Castle in Leuven, Belgium&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The full thesis is available online as a
&lt;a class="link" href="https://dkabus.gitlab.io/thesis-phd/kabus2025dissertation.pdf" target="_blank" rel="noopener"
 &gt;PDF&lt;/a&gt; or
can be read &lt;a class="link" href="https://kabus.eu/diss" &gt;chapter by chapter on this website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please also see the &lt;a class="link" href="https://kabus.eu/diss-ack" &gt;acknowledgements&lt;/a&gt; in which I would like to
thank you all for your continuing support.&lt;/p&gt;
&lt;h1 id="venue-arenberg-castle"&gt;Venue: Arenberg Castle
&lt;/h1&gt;&lt;p&gt;&lt;img alt="Arenberg Castle." class="gallery-image" data-flex-basis="435px" data-flex-grow="181" height="1101" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/00-establish/1-101607.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/00-establish/1-101607_hu_db9d695ebb21446.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/00-establish/1-101607_hu_853ec5ee6067b575.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/00-establish/1-101607.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;As it is the oldest university in the low countries, the campus of KU Leuven
consists of buildings from many centuries. I had the privilege to invite you
to the Castle of Arenberg built in the 16th century, located just a few
kilometres outside Leuven.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Map of the venue. (Source: OpenStreetMap)" class="gallery-image" data-flex-basis="369px" data-flex-grow="153" height="783" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/map.png" srcset="https://kabus.eu/2025/06/10/defence/map_hu_394f3d514b616d6d.png 800w, https://kabus.eu/2025/06/10/defence/map.png 1205w" width="1205"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The defence took place in the main auditorium of Arenberg Castle." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/00-establish/0-20250608-160228.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/00-establish/0-20250608-160228_hu_7ab571bb34e5a8ac.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/00-establish/0-20250608-160228.jpg 1500w" width="1500"&gt;
&lt;img alt="A watermill at the stream in front of the castle." class="gallery-image" data-flex-basis="360px" data-flex-grow="150" height="1331" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/00-establish/2-132126.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/00-establish/2-132126_hu_db068481b3f968a4.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/00-establish/2-132126_hu_193ae703c4a3ebe6.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/00-establish/2-132126.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The stairwell up to the auditorium." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/00-establish/3-121854.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/00-establish/3-121854_hu_245705f164ff0054.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/00-establish/3-121854.jpg 1500w" width="1500"&gt;
&lt;img alt="Printed copies of the thesis were available at the defence." class="gallery-image" data-flex-basis="226px" data-flex-grow="94" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/00-establish/4-094054.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/00-establish/4-094054_hu_5a149b2ffcee65ae.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/00-establish/4-094054_hu_326c764de4273cbd.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/00-establish/4-094054.jpg 1890w" width="1890"&gt;
&lt;img alt="Including personalised bookmarks." class="gallery-image" data-flex-basis="231px" data-flex-grow="96" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/00-establish/5-102527.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/00-establish/5-102527_hu_a1d66cec5efd1cec.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/00-establish/5-102527_hu_8f8a53dbf84c5329.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/00-establish/5-102527.jpg 1932w" width="1932"&gt;&lt;/p&gt;
&lt;h1 id="1000-entrance"&gt;10:00: Entrance
&lt;/h1&gt;&lt;p&gt;&lt;img alt="Slowly, the seats were filling up." class="gallery-image" data-flex-basis="493px" data-flex-grow="205" height="972" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/01-intro/102711.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/01-intro/102711_hu_57435aadcc21ff68.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/01-intro/102711_hu_a33ef97ab4a73d25.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/01-intro/102711.jpg 2000w" width="2000"&gt;
&lt;img alt="Right on time, the professors arrived." class="gallery-image" data-flex-basis="342px" data-flex-grow="142" height="1400" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/01-intro/102903.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/01-intro/102903_hu_d852235429775bc5.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/01-intro/102903_hu_4e39dad476de41b6.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/01-intro/102903.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The jury was introduced by the chairman." class="gallery-image" data-flex-basis="360px" data-flex-grow="150" height="1333" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/01-intro/102923.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/01-intro/102923_hu_76dbe8cfa2154328.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/01-intro/102923_hu_dd01bc1d49b7aec1.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/01-intro/102923.jpg 2000w" width="2000"&gt;
&lt;img alt="Finally, he handed over the word to me." class="gallery-image" data-flex-basis="338px" data-flex-grow="141" height="1418" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/01-intro/103116.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/01-intro/103116_hu_e036f4326663317b.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/01-intro/103116_hu_e003a18e2f2b83bb.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/01-intro/103116.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;h1 id="1030-presentation"&gt;10:30: Presentation
&lt;/h1&gt;&lt;p&gt;&lt;img alt="While the audience patiently listened, …" class="gallery-image" data-flex-basis="397px" data-flex-grow="165" height="1209" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/02-presentation/113238.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/02-presentation/113238_hu_1dbb00b68a2b92e1.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/02-presentation/113238_hu_a77aa601fd8548e4.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/02-presentation/113238.jpg 2000w" width="2000"&gt;
&lt;img alt="… I faced everyone behind a podium." class="gallery-image" data-flex-basis="327px" data-flex-grow="136" height="1466" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/02-presentation/110621.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/02-presentation/110621_hu_415d24a29973351f.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/02-presentation/110621_hu_fcca49107597e04d.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/02-presentation/110621.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="I had some culture wells with me to demonstrate the sizes of heart tissue samples." class="gallery-image" data-flex-basis="172px" data-flex-grow="71" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/02-presentation/103841.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/02-presentation/103841_hu_5d364268abbccada.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/02-presentation/103841.jpg 1438w" width="1438"&gt;
&lt;img alt="My presentation ranged from the basics to state-of-the-art methods." class="gallery-image" data-flex-basis="396px" data-flex-grow="165" height="1212" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/02-presentation/105636.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/02-presentation/105636_hu_67ccf369989075b4.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/02-presentation/105636_hu_33433b348c47587e.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/02-presentation/105636.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;h1 id="1115-questions-from-the-jury"&gt;11:15: Questions from the jury
&lt;/h1&gt;&lt;p&gt;&lt;img alt="Next, it was time for the jury members to ask their questions." class="gallery-image" data-flex-basis="223px" data-flex-grow="93" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/03-questions/110953.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/03-questions/110953_hu_2eeadf5775e0a1ac.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/03-questions/110953_hu_836b9fd92aff1b21.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/03-questions/110953.jpg 1865w" width="1865"&gt;
&lt;img alt="I took my time to answer each of them to the best of my knowledge." class="gallery-image" data-flex-basis="195px" data-flex-grow="81" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/03-questions/113443.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/03-questions/113443_hu_ff252075ed29b411.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/03-questions/113443_hu_333a0ea6c60140a1.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/03-questions/113443.jpg 1628w" width="1628"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Due to a train strike, more professors than expected had to join in remotely via video call." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1500" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/03-questions/111136.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/03-questions/111136_hu_63803602877a5bbd.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/03-questions/111136_hu_709e82e8ef676a3d.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/03-questions/111136.jpg 2000w" width="2000"&gt;
&lt;img alt="Unfortunately, even my promotor at LUMC." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1500" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/03-questions/114346.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/03-questions/114346_hu_290be1e1fd382946.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/03-questions/114346_hu_3c60a743a35222ef.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/03-questions/114346.jpg 2000w" width="2000"&gt;
&lt;img alt="A lot of them were there in person as well though." class="gallery-image" data-flex-basis="360px" data-flex-grow="150" height="1333" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/03-questions/113053.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/03-questions/113053_hu_1305c70f4554cdf3.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/03-questions/113053_hu_1036d18c8fac8b3.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/03-questions/113053.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Even my friends and family asked interesting questions!" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1116" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/03-questions/113135.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/03-questions/113135_hu_e9c9fb3e835b674e.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/03-questions/113135_hu_eaf76b391534a0db.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/03-questions/113135.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;h1 id="1215-congratulations"&gt;12:15: Congratulations
&lt;/h1&gt;&lt;p&gt;&lt;img alt="After a bit of a wait for the professors’ deliberations in the chapel of the castle, …" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/04-deliberation/133237.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/04-deliberation/133237_hu_8a1e8c703758b466.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/04-deliberation/133237.jpg 1500w" width="1500"&gt;
&lt;img alt="… they returned with the certificates in hand." class="gallery-image" data-flex-basis="281px" data-flex-grow="117" height="1704" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/05-congrats/122239.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/05-congrats/122239_hu_6b1f48e6ad964cef.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/05-congrats/122239_hu_7ba9bc9bafa20021.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/05-congrats/122239.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Due to Leiden University protocol, I was not allowed to shake the hand of Twan de Vries." class="gallery-image" data-flex-basis="255px" data-flex-grow="106" height="1881" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/05-congrats/122525.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/05-congrats/122525_hu_c154a774e2f6d980.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/05-congrats/122525_hu_999e6e38d8832d2a.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/05-congrats/122525.jpg 2000w" width="2000"&gt;
&lt;img alt="This was not the case for KU Leuven professors, who shook my hand congratulatorily." class="gallery-image" data-flex-basis="434px" data-flex-grow="180" height="1105" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/05-congrats/123511.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/05-congrats/123511_hu_4bba1b97a2a4cc39.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/05-congrats/123511_hu_9cd84e9915fe2f73.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/05-congrats/123511.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="I was happy they were willing to take a photo in the lecture hall." class="gallery-image" data-flex-basis="467px" data-flex-grow="194" height="1026" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/05-congrats/123532.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/05-congrats/123532_hu_3882b07a6e1a422f.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/05-congrats/123532_hu_f2704ef4ab25d648.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/05-congrats/123532.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;h1 id="1230-reception"&gt;12:30: Reception
&lt;/h1&gt;&lt;p&gt;&lt;img alt="I was welcomed by applause in the ceremonial halls of the castle." class="gallery-image" data-flex-basis="360px" data-flex-grow="150" height="1331" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/06-reception/124204.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/06-reception/124204_hu_cbced25a3c036980.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/06-reception/124204_hu_f3815578e199be9f.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/06-reception/124204.jpg 2000w" width="2000"&gt;
&lt;img alt="So many people gathered in Leuven for my defence." class="gallery-image" data-flex-basis="360px" data-flex-grow="150" height="1333" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/06-reception/124645.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/06-reception/124645_hu_c47673e9d077214b.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/06-reception/124645_hu_e85e22ac29dcd48b.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/06-reception/124645.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="I felt really priviliged to be allowed to defend in these halls." class="gallery-image" data-flex-basis="421px" data-flex-grow="175" height="1138" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/06-reception/125550.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/06-reception/125550_hu_d2b15fed5651cec8.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/06-reception/125550_hu_6740c075563c1647.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/06-reception/125550.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;h2 id="catering"&gt;Catering
&lt;/h2&gt;&lt;p&gt;&lt;img alt="The catering provided a variety of drinks." class="gallery-image" data-flex-basis="532px" data-flex-grow="221" height="901" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/07-food/125534.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/07-food/125534_hu_ac15b5ac84a3530d.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/07-food/125534_hu_7f48b637610820dd.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/07-food/125534.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="A well deserved first sip of beer." class="gallery-image" data-flex-basis="321px" data-flex-grow="133" height="1494" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/07-food/124323.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/07-food/124323_hu_a99936a08581cc17.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/07-food/124323_hu_a150588512e68aca.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/07-food/124323.jpg 2000w" width="2000"&gt;
&lt;img alt="Waiters were offering snacks to the guests." class="gallery-image" data-flex-basis="366px" data-flex-grow="152" height="1308" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/07-food/124828.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/07-food/124828_hu_bead97255dff3352.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/07-food/124828_hu_2581812ac3c42178.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/07-food/124828.jpg 2000w" width="2000"&gt;
&lt;img alt="The “cosy” package included various happjes, like beetroot, couscous and tomato soup." class="gallery-image" data-flex-basis="360px" data-flex-grow="150" height="1333" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/07-food/125056.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/07-food/125056_hu_d560f664f743460b.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/07-food/125056_hu_5541fe12dfa4ded.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/07-food/125056.jpg 2000w" width="2000"&gt;
&lt;img alt="Eet smakelijk!" class="gallery-image" data-flex-basis="159px" data-flex-grow="66" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/07-food/125757.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/07-food/125757_hu_1e1a0e3140b35069.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/07-food/125757.jpg 1333w" width="1333"&gt;&lt;/p&gt;
&lt;h2 id="gifts"&gt;Gifts
&lt;/h2&gt;&lt;p&gt;&lt;img alt="Many guests wrote into the guest book, more memories to be kept forever." class="gallery-image" data-flex-basis="314px" data-flex-grow="130" height="1527" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/08-gifts/124410.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/08-gifts/124410_hu_a0ee7b5a451503a4.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/08-gifts/124410_hu_2c97d8b1a0064ce0.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/08-gifts/124410.jpg 2000w" width="2000"&gt;
&lt;img alt="My PhD diploma in the “bul” was towering over heart-shaped balloons." class="gallery-image" data-flex-basis="358px" data-flex-grow="149" height="1340" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/08-gifts/124544.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/08-gifts/124544_hu_607b8f504f85a9ac.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/08-gifts/124544_hu_688522b3606abc3e.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/08-gifts/124544.jpg 2000w" width="2000"&gt;
&lt;img alt="I got 55 marzipan hearts, the number of months since I started my PhD." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1500" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/08-gifts/124751.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/08-gifts/124751_hu_b6dc94b1b35a19b9.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/08-gifts/124751_hu_696163954db4f810.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/08-gifts/124751.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="My elementary school teacher made me one of her famous “eggs”." class="gallery-image" data-flex-basis="159px" data-flex-grow="66" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/08-gifts/130609.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/08-gifts/130609_hu_a17e13523b0b045c.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/08-gifts/130609.jpg 1333w" width="1333"&gt;
&lt;img alt="A bonsai from Cindy &amp; Twan would await me at LUMC." class="gallery-image" data-flex-basis="360px" data-flex-grow="150" height="1333" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/08-gifts/131439.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/08-gifts/131439_hu_11492f809a85beea.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/08-gifts/131439_hu_2a946c896cb16e27.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/08-gifts/131439.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;h2 id="group-photos"&gt;Group photos
&lt;/h2&gt;&lt;p&gt;&lt;img alt="A group photo of all guests on the balcony of the castle." class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1125" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/09-groups/131950.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/09-groups/131950_hu_f1d3ead6ca6a89f9.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/09-groups/131950_hu_c1793730fddb99c2.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/09-groups/131950.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="And another!" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1125" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/09-groups/132005.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/09-groups/132005_hu_d4056c4fe0cd0d5e.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/09-groups/132005_hu_77d33ce2fa5b256d.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/09-groups/132005.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="My sister and me." class="gallery-image" data-flex-basis="181px" data-flex-grow="75" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/09-groups/121551.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/09-groups/121551_hu_be8310bc7f53f107.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/09-groups/121551.jpg 1511w" width="1511"&gt;
&lt;img alt="Familie Kuhlisch." class="gallery-image" data-flex-basis="439px" data-flex-grow="183" height="1092" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/09-groups/132218.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/09-groups/132218_hu_caf998b61902ba91.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/09-groups/132218_hu_a0ca7ecfdbab70ef.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/09-groups/132218.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Proud doctor of science." class="gallery-image" data-flex-basis="224px" data-flex-grow="93" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/09-groups/132400.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/09-groups/132400_hu_9f997a4dde4b9ed9.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/09-groups/132400_hu_1c7d42754e0ca63a.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/09-groups/132400.jpg 1867w" width="1867"&gt;
&lt;img alt="My grandpa and me." class="gallery-image" data-flex-basis="281px" data-flex-grow="117" height="1706" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/09-groups/133509.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/09-groups/133509_hu_68332beab312fac6.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/09-groups/133509_hu_3c6a4f5838b25661.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/09-groups/133509.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Team HeartKOR at KU Leuven." class="gallery-image" data-flex-basis="389px" data-flex-grow="162" height="1232" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/09-groups/132520.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/09-groups/132520_hu_be6124f523b02612.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/09-groups/132520_hu_2f1380a028f975c8.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/09-groups/132520.jpg 2000w" width="2000"&gt;
&lt;img alt="Members of the Laboratory of Experimental Cardiology at LUMC." class="gallery-image" data-flex-basis="312px" data-flex-grow="130" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/09-groups/132852.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/09-groups/132852_hu_c0d74c2af7f476a0.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/09-groups/132852_hu_13acbb472d4a7def.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/09-groups/132852.jpg 2000w" width="2000"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Again, I would like to thank everyone for coming to my defence!" class="gallery-image" data-flex-basis="234px" data-flex-grow="97" height="2000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/defence/photos/10-thanks/124213.jpg" srcset="https://kabus.eu/2025/06/10/defence/photos/10-thanks/124213_hu_ff13996f0647bfb4.jpg 800w, https://kabus.eu/2025/06/10/defence/photos/10-thanks/124213_hu_74209546aba58c5f.jpg 1600w, https://kabus.eu/2025/06/10/defence/photos/10-thanks/124213.jpg 1956w" width="1956"&gt;&lt;/p&gt;
&lt;h1 id="1430-end-of-the-reception"&gt;14:30: End of the reception
&lt;/h1&gt;&lt;p&gt;The day continued with an early dinner only for close family members and
concluded with a pub crawl in the &lt;a class="link" href="https://maps.app.goo.gl/va67kBQXaDvNWyDp8" target="_blank" rel="noopener"
 &gt;Oude Markt in the city centre of
Leuven&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Towards data-driven generation of individualised human heart models from scalable heart muscle sheets</title><link>https://kabus.eu/2025/06/10/dissertation/</link><pubDate>Tue, 10 Jun 2025 09:45:00 +0200</pubDate><guid>https://kabus.eu/2025/06/10/dissertation/</guid><description>&lt;img src="https://kabus.eu/2025/06/10/dissertation/cover.svg" alt="Featured image of post Towards data-driven generation of individualised human heart models from scalable heart muscle sheets" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;A PDF version of the full thesis is available
&lt;a class="link" href="https://dkabus.gitlab.io/thesis-phd/kabus2025dissertation.pdf" target="_blank" rel="noopener"
 &gt;online&lt;/a&gt;,
but you can also read the full contents on this website at the links below.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Dissertation presented in partial fulfillment of the requirements for the
degrees of:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Doctor of Science (PhD)&lt;/strong&gt;: Mathematics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Doctor of Philosophy (PhD)&lt;/strong&gt;: Medicine&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Institutions:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;KU Leuven&lt;/strong&gt;, Arenberg Doctoral School, Faculty of Science&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leiden University Medical Center (LUMC)&lt;/strong&gt;, LUMC Graduate School, Faculty of Medicine&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Supervisors:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dr. Hans Dierckx (LUMC)&lt;/li&gt;
&lt;li&gt;Prof. Dr. Daniël A. Pijnappels (LUMC)&lt;/li&gt;
&lt;li&gt;Dr. Antoine A.F. de Vries (LUMC)&lt;/li&gt;
&lt;li&gt;Prof. Dr. Tom Van Doorsselaere (KU Leuven)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Members of the examination committee:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prof. Dr. Stefan Van Aelst (chair) (KU Leuven)&lt;/li&gt;
&lt;li&gt;Prof. Dr. Piet Claus (KU Leuven)&lt;/li&gt;
&lt;li&gt;Prof. Dr. Jasmina Magdalenić Zhukov (KU Leuven)&lt;/li&gt;
&lt;li&gt;Prof. Dr. Roeland Merks (Leiden University)&lt;/li&gt;
&lt;li&gt;Dr. Vincent Portero (LUMC)&lt;/li&gt;
&lt;li&gt;Prof. Dr. Maxime Sermesant (Inria, IHU Liryc, 3IA Côte d&amp;rsquo;Azur)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="abstract"&gt;Abstract
&lt;/h1&gt;&lt;p&gt;Heart rhythm disorders like atrial and ventricular tachycardia and
fibrillation can be treated in various ways. These arrhythmias are
characterised by abnormal electrical activity in the heart such as re-entrant
circuits&amp;mdash;for instance spiral waves. Clinicians can choose from methods
ranging from medication to surgical interventions like ablation or implantation of a
pacemaker or defibrillator. These choices depend on a large variety of factors
that, in the end, all come down to tweaking the electrical patterns to restore a
healthy heart rhythm.&lt;/p&gt;
&lt;p&gt;It is not always clear which treatment is the best for a particular patient and
what outcome can be expected. The diagnosis and treatment of the cause of an
arrhythmia, for instance by localisation of re-entrant circuits, is a complex
process as it should also take into account the patient&amp;rsquo;s unique anatomy and
physiology. This is why personalised computational models of the
heart&amp;mdash;so-called cardiac digital twins&amp;mdash;hold great promise for the future of
cardiology.&lt;/p&gt;
&lt;p&gt;Zooming in to the level of individual heart muscle cells, creating a
computational model of their electrical activity remains challenging: The
response of individual cells to stimuli must be measured and combined into
a model that should then be able to predict behaviour on the tissue and organ
level&amp;mdash;which can be a big leap requiring a lot of validation.&lt;/p&gt;
&lt;p&gt;In this dissertation, we explore computational methods for personalised modelling of
cardiac electrophysiology. We create software packages to numerically simulate
the reaction-diffusion equations for the electrical activity of the heart. We
also develop methods to detect and study re-entrant circuits in the heart as
phase defects. We describe arrhythmia formation via quasiparticles in
Feynman-like diagrams. Lastly, we create data-driven models for cardiac
electrophysiology directly from optical voltage mapping data on
monolayers&amp;mdash;videos of the excitation waves in two-dimensional tissue samples.&lt;/p&gt;
&lt;p&gt;While the reaction-diffusion based software package can be used for highly
detailed simulations of the electrical patterns in the heart, the novel
data-driven approach allows streamlined creation of models specific to
individual tissue samples at much lower computational cost. Spiral wave
dynamics can be predicted from just focal wave data. The phase defect approach
offers a new way to study re-entrant circuits in the heart: With the
quasiparticle view, we uncovered deeper insights into the mechanisms of
arrhythmia formation.&lt;/p&gt;
&lt;p&gt;The presented methods are a few steps towards the creation of fully
personalised cardiac digital twins. In the future, the data-driven model
creation pipeline could be used to refine a general model of the cardiac
excitation waves to a patient-specific one. In conjunction with the phase
defect approach, this could lead to improved diagnosis and treatment strategies
for heart rhythm disorders that are truly personal.&lt;/p&gt;
&lt;h1 id="chapters"&gt;Chapters
&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;a class="link" href="https://kabus.eu/diss-intro" &gt;Introduction to computational modelling of cardiac excitation waves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kabus.eu/kabus2024ithildin" &gt;The Ithildin library for efficient numerical solution of anisotropic reaction-diffusion problems in excitable media&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kabus.eu/kabus2022numerical" &gt;Numerical methods for the detection of phase defect structures in excitable media&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kabus.eu/arno2024feynman" &gt;Analysis of complex excitation patterns using Feynman-like diagrams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kabus.eu/kabus2024fast" &gt;Fast creation of data-driven low-order predictive cardiac tissue excitation models from recorded activation patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kabus.eu/diss-outro" &gt;Steps towards true cardiac digital twins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kabus.eu/diss-ack" &gt;Acknowledgements&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Acknowledgments from dissertation</title><link>https://kabus.eu/2025/06/10/dissertation-acknowledgments/</link><pubDate>Tue, 10 Jun 2025 09:30:00 +0200</pubDate><guid>https://kabus.eu/2025/06/10/dissertation-acknowledgments/</guid><description>&lt;img src="https://kabus.eu/2025/06/10/dissertation-acknowledgments/cover.png" alt="Featured image of post Acknowledgments from dissertation" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;This text is part of my &lt;a class="link" href="https://kabus.eu/diss" &gt;dissertation&lt;/a&gt;.
The full thesis is available online as a
&lt;a class="link" href="https://dkabus.gitlab.io/thesis-phd/kabus2025dissertation.pdf" target="_blank" rel="noopener"
 &gt;PDF&lt;/a&gt; or
can be read &lt;a class="link" href="https://kabus.eu/diss" &gt;chapter by chapter on this website&lt;/a&gt;.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;Besides all of the knowledge I gained about computational modelling of the
heart, I can say that in my &amp;ldquo;global PhD&amp;rdquo;, I certainly learned a thing or two
about the logistics of interdisciplinary and international collaboration:
countless moves between the Netherlands and Belgium, negotiating the
bureaucracy of two universities, and the challenges of building bridges between
mathematics and physics on the one hand, and biology and medicine on the other.
Over these four years, I have become a cosmopolitan European&amp;mdash;and I am
grateful to all the people I have met along the way who helped shape the person
that I am now. From my birth place of Bochum to Kortrijk, Gent, Leuven, and of
course my new home of Leiden, I have been welcomed with open arms. Truly, thank
you all.&lt;/p&gt;
&lt;p&gt;The term &amp;ldquo;Doktorvater&amp;rdquo; (doctoral father) is a fitting description for the role
of a PhD supervisor, though I have been lucky enough to have a whole doctoral
family to support me. I would like to thank my supervisors &lt;strong&gt;Hans Dierckx&lt;/strong&gt;, &lt;strong&gt;Daniël
Pijnappels&lt;/strong&gt;, and &lt;strong&gt;Antoine de Vries&lt;/strong&gt; for pushing me to become a better scientist
day by day. They gave me the freedom to explore the ideas that interested me
at any moment, while also providing the guidance to keep me on track. &lt;strong&gt;Hans&lt;/strong&gt;,
thank you for the brainstorming sessions drawing diagrams on the blackboard
distributing colourful chalk dust all over the room. &lt;strong&gt;Daniël&lt;/strong&gt;, thank
you for building this truly interdisciplinary lab, a place where groundbreaking
research is done every day. &lt;strong&gt;Twan&lt;/strong&gt;, thank you for perfecting the art of
scientific writing and for always being available for an interesting chat.&lt;/p&gt;
&lt;p&gt;To my extended team of supervisors of &lt;strong&gt;Alexander Panfilov&lt;/strong&gt;, &lt;strong&gt;Katja Zeppenfeld&lt;/strong&gt;,
and &lt;strong&gt;Tom Van Doorsselaere&lt;/strong&gt;, as well as my supervisory committee, thank you for
your support. &lt;strong&gt;Sasha&lt;/strong&gt;, it still makes me smile when we talked about being
star-struck when meeting your scientific idols.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HeartKOR!&lt;/strong&gt; What a rollercoaster ride it has been. From the first video calls
after my job interview during the pandemic with &lt;strong&gt;Louise Arno&lt;/strong&gt; and &lt;strong&gt;Lore
Leenknegt&lt;/strong&gt; where we talked as if I was already part of the team, to the group
growing with &lt;strong&gt;Marie Cloet&lt;/strong&gt; and &lt;strong&gt;Nathan Dermul&lt;/strong&gt;, the summer school in
Bordeaux, and the many productive meetings in Kortrijk and online. I am
grateful for both: friendship and science. &lt;strong&gt;Louise&lt;/strong&gt;, thank you for being my
carpool buddy; &lt;strong&gt;Lore&lt;/strong&gt;, thanks for letting me store all my moving boxes in
your garage while I went on a trip to teach sailing; &lt;strong&gt;Marie&lt;/strong&gt;, thank you for
listening to me, tea in hand, whenever I needed to vent; &lt;strong&gt;Nathan&lt;/strong&gt;, big thanks for giving
me the grand tour of Roeselare. And &lt;strong&gt;Aaron Gobeyn&lt;/strong&gt;, thank you for showing me
how smoothly a master&amp;rsquo;s project can be done.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Team HeartKOR at KU Leuven campus Kortrijk, 2023-05-02" class="gallery-image" data-flex-basis="768px" data-flex-grow="320" height="599" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-acknowledgments/heartkor.jpg" srcset="https://kabus.eu/2025/06/10/dissertation-acknowledgments/heartkor_hu_8e657eaeba92f930.jpg 800w, https://kabus.eu/2025/06/10/dissertation-acknowledgments/heartkor_hu_5c390eced9eed44c.jpg 1600w, https://kabus.eu/2025/06/10/dissertation-acknowledgments/heartkor.jpg 1918w" width="1918"&gt;&lt;/p&gt;
&lt;p&gt;And of course, gratitude to the &lt;strong&gt;Laboratory of Experimental Cardiology&lt;/strong&gt; with
all its members, too many to list. It is an honour and a privilege to be part
of this group. Just to name a few: thanks to &lt;strong&gt;Tim De Coster&lt;/strong&gt; for deep
mathematical and not-so-mathematical discussions, to &lt;strong&gt;Niels Harlaar&lt;/strong&gt; for
introducing me to the optical voltage mapping data, and the technicians &lt;strong&gt;Cindy
Bart&lt;/strong&gt;, &lt;strong&gt;Juan Zhang&lt;/strong&gt;, and &lt;strong&gt;Sven Dekker&lt;/strong&gt; for preparing cells for
my experiments, etc. &lt;strong&gt;Minka Bax&lt;/strong&gt;, thank you for welcoming me in Leiden while
I had to quarantine immediately after moving. &lt;strong&gt;Balázs Ördög&lt;/strong&gt;, thank you for
kayaking, sailing, and driving me and my boxes on my first move to Belgium.
I am always happy to help in our office gardening sessions, &lt;strong&gt;Vincent Portero&lt;/strong&gt;.
Nogmaals hartelijk dank aan iedereen in het lab!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Laboratory of Experimental Cardiology at Leiden University Medical Center, 2024-04-05" class="gallery-image" data-flex-basis="975px" data-flex-grow="406" height="999" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-acknowledgments/leiden-lab.jpg" srcset="https://kabus.eu/2025/06/10/dissertation-acknowledgments/leiden-lab_hu_4c733af8ea740860.jpg 800w, https://kabus.eu/2025/06/10/dissertation-acknowledgments/leiden-lab_hu_a88936e09439ff7f.jpg 1600w, https://kabus.eu/2025/06/10/dissertation-acknowledgments/leiden-lab_hu_baef59c5bea405f0.jpg 2400w, https://kabus.eu/2025/06/10/dissertation-acknowledgments/leiden-lab.jpg 4059w" width="4059"&gt;&lt;/p&gt;
&lt;p&gt;Also thank you, my co-authors &lt;strong&gt;Christian Zemlin&lt;/strong&gt; and &lt;strong&gt;Olivier Bernus&lt;/strong&gt;, for
the collaboration on the Ithildin paper. I look forward to many more
opportunities to work together. Also I would like to thank &lt;strong&gt;Jürgen Dreher&lt;/strong&gt;,
who originally introduced me to the field of cardiac modelling for my
bachelor&amp;rsquo;s and master&amp;rsquo;s theses.&lt;/p&gt;
&lt;p&gt;Talking about sailing, which has played a big part in my free time to balance
out the academic work, I would like to thank everyone in the &lt;strong&gt;SIRUB&lt;/strong&gt; sailing
club, especially &lt;strong&gt;Michael Hornig&lt;/strong&gt;, for countless adventures on different
waters. Sei es das Mittelmeer, die Ostsee, das IJsselmeer, oder die Seen in
Friesland, wir segeln weiter! Mögen alle Winschen richtig belegt werden.
Also a big thank you to &lt;strong&gt;Merian&lt;/strong&gt; for the weekends of sailing shenanigans in
Scheveningen. Digging out a boat from the sand after a storm is not something
you forget easily.&lt;/p&gt;
&lt;p&gt;Then, my dear friends all around the world, some of whom I have known for
decades and others I have only met in these last four years probably while
travelling. Thank you for being there for me, when we are once again following
all ScotRail lines on the map to just find some remote station on GeoGuessr
(&lt;strong&gt;Schweinstein&amp;rsquo;s gang: Lisa, Julia, Basti, Pascal&lt;/strong&gt;), when we are hiking over
to Hattingen on the weekend (&lt;strong&gt;Miguel, Niels, Niklas, Robin&lt;sup&gt;2&lt;/sup&gt;
&lt;/strong&gt;), or when we
finally update each other about our lives (&lt;strong&gt;Kira, Racha, Adriana, Lena&lt;/strong&gt;).
Thank you for all the memories we have made together and the ones we will still
make (&lt;strong&gt;Dina, Dennis, Zoë, Emil, Veronica&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Meine Großeltern, &lt;strong&gt;Doris&lt;/strong&gt; und &lt;strong&gt;Ralf&lt;/strong&gt;, ich freue mich immer auf die Zeit,
die wir zusammen verbringen, und hoffentlich werden es noch viele Jahre sein.
Danke an meine Eltern, &lt;strong&gt;Iris&lt;/strong&gt; und &lt;strong&gt;Diethelm&lt;/strong&gt;, die in mir die
wissenschaftliche Neugier geweckt haben und mich immer unterstützen, egal wo
ich gerade bin. Wer hätte gedacht, dass wir beide letztendlich in der Medizin
landen würden, als ich Physik studiert habe und du Biologie, danke &lt;strong&gt;Muriel&lt;/strong&gt;!
Ich bin immer für dich da, liebe Schwester, auch wenn München und Leiden so
weit auseinander liegen.&lt;/p&gt;
&lt;p&gt;And if I forgot to mention you and yet you are reading this, know that I am
grateful for you too.&lt;/p&gt;
&lt;p&gt;Some people think of life as a book with chapters to be closed and opened.
Instead, I believe life is more like a river, with tributaries and confluences
and meanders. I am not a believer in strict beginnings and endings, not a
believer in strict categories to fit in. So let&amp;rsquo;s see what things will remain
and what things will change.&lt;/p&gt;
&lt;p&gt;I am looking forward to the journey ahead.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Desmond Kabus&lt;/em&gt;&lt;br&gt;
Leiden, 2024-12-05&lt;/p&gt;</description></item><item><title>Steps towards true cardiac digital twins</title><link>https://kabus.eu/2025/06/10/dissertation-outro/</link><pubDate>Tue, 10 Jun 2025 09:15:00 +0200</pubDate><guid>https://kabus.eu/2025/06/10/dissertation-outro/</guid><description>&lt;img src="https://kabus.eu/2025/06/10/dissertation-outro/cover.svg" alt="Featured image of post Steps towards true cardiac digital twins" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;This chapter is part of my &lt;a class="link" href="https://kabus.eu/diss" &gt;dissertation&lt;/a&gt;.
The full thesis is available online as a
&lt;a class="link" href="https://dkabus.gitlab.io/thesis-phd/kabus2025dissertation.pdf" target="_blank" rel="noopener"
 &gt;PDF&lt;/a&gt; or
can be read &lt;a class="link" href="https://kabus.eu/diss" &gt;chapter by chapter on this website&lt;/a&gt;.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h1 id="discussion"&gt;Discussion
&lt;/h1&gt;&lt;p&gt;Ranging from microscopic quasiparticle interactions and detailed simulations of
individual ion channels, to macroscopic tissue-first models which may be used
in cardiac digital twins: in this dissertation, we have presented mathematical
tools for cardiac electrophysiology research. On the one hand, there are
analysis methods for the electrical excitation patterns of the heart&amp;mdash;mainly
centred around the concept of phase defects, their detection, see &lt;a class="link" href="https://kabus.eu/2022/07/12/kabus2022numerical/" &gt;chapter
3&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;), and their study via Feynman-like diagrams, see
&lt;a class="link" href="https://kabus.eu/2024/11/22/arno2024feynman/" &gt;chapter 4&lt;/a&gt; (&lt;a class="link" href="#ref-arno2024feynman" &gt;Arno et al.,
2024a&lt;/a&gt;). On the other hand, we have presented numerical
methods for the simulation of these patterns, following both the
well-established reaction-diffusion approach in &lt;a class="link" href="https://kabus.eu/2024/09/19/kabus2024ithildin/" &gt;chapter
2&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus, Cloet, et al.,
2024&lt;/a&gt;) and a novel data-driven model for the dynamics
of cardiac excitation waves as observed in optical voltage mapping data in
&lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/" &gt;chapter 5&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et al.,
2024&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Simulation of cardiac excitation patterns using the reaction-diffusion based
approach has been thoroughly explored and proven over the decades. Our software
follows this approach and reaps the benefits of the established methods and the
vast variety of in-silico tissue models that have been designed and published
for the bidomain and monodomain description. This
enables us to build on the existing knowledge of cardiac electrophysiology and
to explore phenomena on state-of-the-art level with our software framework.&lt;/p&gt;
&lt;p&gt;With the reaction-diffusion based software packages Ithildin and Pigreads, it
is possible to perform in-silico versions of tissue-level experiments, allowing
for the study of complex wave patterns for instance in monolayers. The
influence of tissue geometry, anisotropy, and heterogeneity as well as the
differences between different types of cells can be investigated, as well
as the impact of drugs that affect the electrical behaviour of the cells,
and many more phenomena. As with all software developed and articles
written in the course of this PhD project, they are freely accessible&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; to
the public following the philosophy of open source and open science.&lt;/p&gt;
&lt;p&gt;We have also collected and implemented useful methods for the analysis of
excitation patterns as Python modules. Both in-silico simulation data and
in-vitro optical mapping data are supported by the Ithildin and Sappho Python
modules, respectively. Signal processing methods such as
smoothing, filtering, and data transformations, as well as robust algorithms
for the computation of quantities of interest for cardiology such as maps of
LAT, APD, and CV are included.&lt;/p&gt;
&lt;p&gt;During arrhythmias, the heart&amp;rsquo;s electrical activity is governed by
re-entrant waves, which can either be anatomical or functional re-entry.
In both of these cases, the spiral wave core drives the electrical activity of
the entire wave. Instead of using phase singularities, we have proposed to
describe the core as phase defects. In two-dimensional excitable media, these
phase defect lines show the extent of conduction blocks which can either be the
functional rotor core or anatomical obstacles. With the detection of phase defects in
&lt;a class="link" href="https://kabus.eu/2022/07/12/kabus2022numerical/" &gt;chapter 3&lt;/a&gt;, we offer a more robust way to detect the driving core
of spiral waves, a tool which may become useful in the context of ablation
procedures.&lt;/p&gt;
&lt;p&gt;New insights were gained into the formation of arrhythmias following the
quasiparticle viewpoint. Three elementary cardions were identified as the
intersections of wave fronts with phase defects, wave backs with phase defects,
and the end points of phase defects&amp;mdash;heads, tails, and pivots, respectively.
They are always born in particle-antiparticle pairs that can annihilate and are
associated with two different kinds of charges, the $Q$-charge in phase and the
$P$-charge in space. Compound cardions like the growth, shrink, filament, and
core particles were identified and their role in arrhythmogenesis was discussed
in &lt;a class="link" href="https://kabus.eu/2024/11/22/arno2024feynman/" &gt;chapter 4&lt;/a&gt;. There is a strong analogy between the cardions and the
elementary particles in the Standard Model of particle physics. One of the main
results of &lt;a class="link" href="https://kabus.eu/2024/11/22/arno2024feynman/" &gt;chapter 4&lt;/a&gt; is to describe wave dynamics, particularly
formation of figure-of-eight re-entry, using Feynman-like diagrams. Both
in-silico and in-vitro data were analysed using these methods which can be seen
as an extension of the phase singularity description of spiral waves.
The use of these diagrams may provide new, deeper understanding of the
mechanisms of arrhythmogenesis.&lt;/p&gt;
&lt;p&gt;A full cardiac digital twin of a patient&amp;rsquo;s heart requires modelling the
electrophysiology on the whole-heart scale, i.e., simulations in three spatial
dimensions for long durations of minutes to hours in length and a large
computational domain in space. The reaction-diffusion based approach is, due to
the CFL condition, still too computationally expensive,
preventing their effective use in
most clinical settings. Distephym, the data-driven model for excitation waves
we presented in &lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/" &gt;chapter 5&lt;/a&gt;, is a promising alternative: Due to the
different way of encoding wave dynamics in the state space, it is possible to
run at much coarser temporal resolutions while remaining stable. The model
equations are encapsulated in the polynomial and the updating equations for the
memory-encoding moving averages and gradient-approximating standard
deviations&amp;mdash;all of which are simple and computationally cheap to evaluate. We
can fit the model effectively just with data that can be observed in mapping
experiments. The model can generalise to unseen activation patterns: despite
being trained on focal waves, it can predict the dynamics of spiral waves. We
attribute this to the use of stochastic burst pacing, which &amp;ldquo;stress-tests&amp;rdquo; the
tissue during data collection to cover as much of the possible states the
tissue can be in as possible.&lt;/p&gt;
&lt;p&gt;While we have so far only used the data-driven model on optical voltage mapping
data of cardiac in-vitro monolayers, the method is general and can be applied
to other data sets, different scales in time and space, and even different
excitable media. The dynamics are encoded in the state space, such that the
model can learn given enough data. However, the model is, of course, limited to
the spatial and temporal scales that are encoded in the memory terms and
gradient approximations. Using multiple EMAs and SDs can be used to encode and
learn more complex dynamics, for instance precise changes to action potential
morphology, cell memory effects or cell aging. While currently, we have only
trained one model for the entire tissue, it is possible to train multiple
models for different regions of the tissue, or even individual cells, to better
capture the heterogeneity of the tissue. The model also must not necessarily
stay stationary in time, but can be updated as new data come in. This
online-learning approach is a promising extension of the method which may be
used for real-time prediction of excitation patterns in the future. Another
possibility is to use the data-driven model as a correction term to an existing
ionic model to improve its predictive power for a given tissue sample. Instead
of a polynomial, more complex function approximators such as neural networks
should also be explored to model the dynamics. Finally, the use of the
advection-based description of the wave propagation in combination with a
general function approximator for the dynamics of the tissue is a new approach
of modelling these excitation patterns. The limitations and advantages of this
method are still to be explored in more detail.&lt;/p&gt;
&lt;h1 id="outlook"&gt;Outlook
&lt;/h1&gt;&lt;p&gt;The methods presented in this dissertation are a few steps towards the creation
of fully personalised cardiac digital twins. The data-driven model creation
pipeline could be extended to learn the intricate dynamics seen in individual
tissue samples, building up a library of models for different types of cells.
Multiple parameter sets at a fixed model complexity for different regions of the
tissue could then be assembled to create a model of the entire heart. The
parameters could then&amp;mdash;with the online-learning approach&amp;mdash;be tweaked to
better fit the observed patterns, tweaked to better represent the patient&amp;rsquo;s
heart. Tissue parameters are encoded in the model and could be compared with
parameters for other patients and cell types in the library to transfer the
knowledge gained from one patient to another. The model could then be used to
predict the outcome of different treatment strategies, for instance, how an
ablation in a certain region would impact the wave propagation in the heart.&lt;/p&gt;
&lt;p&gt;As the model is only trained on the observed excitation patterns, it just needs
to &amp;ldquo;watch&amp;rdquo; a patient&amp;rsquo;s heart for an extended amount of time while inferring a model
of the behaviour of the cells. One could imagine a future where a patient
undergoes a mapping procedure, and the model learns from the incoming data in real
time. One big hurdle to overcome is how to obtain these data.
Optical voltage mapping is generally speaking not possible in a clinical setting,
only less invasive methods like ECGs or EGMs are available, possibly from intra-cardiac
catheters. It remains to be seen how well the data-driven model
can be trained on these data. In the future, novel methods may become available
to observe the electrical activity of the heart in more detail, which would greatly
improve the quality of the data-driven models. In contrast to the classical approach
to model the ionic currents in the heart which are manually tuned to fit the
limited available data, data-driven models get better the more data are available.&lt;/p&gt;
&lt;p&gt;Due to the resurgence of interest in machine learning in the last decade, novel
methods for in-silico modelling are taking shape, re-thinking the way we
model the electrical activity of the heart.
These methods can not only be used for the creation of digital twins, but also
to gain deeper insights into the mechanisms of arrhythmia formation via in-silico
experiments or the particle-based viewpoint of arrhythmogenesis.
Machine learning is also promising for the solution of inverse problems in cardiac electrophysiology.
While, in this work, we advocate the creation of digital twins, the presented methods
may be used in any of these other directions to develop better clinical
diagnostics and treatments.&lt;/p&gt;
&lt;p&gt;In view of the associated savings in
computational cost and the ability to learn directly from observed data, the
data-driven approach presented in this dissertation is a promising alternative
to the classical reaction-diffusion based approach. This jump in computational
efficiency lets us get closer to full real-time simulations of the entire heart
which would allow for personalised testing of treatment strategies. These
models would make only minimal assumptions about the underlying dynamics
reducing bias and become better and better at predicting the waves the more
data are available. Combining these new approaches, to build upon and learn from
the existing methods, will be another key step towards the creation of better
in-silico models of the heart.&lt;/p&gt;
&lt;p&gt;The next years will be a pivotal time for the field of cardiac
electrophysiology. We have shown the potential of data-driven models to predict
the cardiac excitation patterns in a tissue sample. The next steps will be to
extend and grow the method, to learn from more data, to move to larger scales.
Due to continued efforts of the scientific community, we keep getting closer to
the goal of creating true cardiac digital twins for the unique electrical
behaviour of each patient&amp;rsquo;s heart.&lt;/p&gt;
&lt;h1 id="references"&gt;References
&lt;/h1&gt;&lt;div id="ref-arno2024feynman" class="csl-entry"&gt;
&lt;p&gt;Arno, L., Kabus, D., &amp;amp; Dierckx, H. (2024a). Analysis of complex
excitation patterns using
&lt;span class="nocase"&gt;Feynman-like&lt;/span&gt;
diagrams. &lt;em&gt;Scientific Reports&lt;/em&gt;, &lt;em&gt;14&lt;/em&gt;(1), 28962.
&lt;a class="link" href="https://doi.org/10.1038/s41598-024-73544-z" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41598-024-73544-z&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id="ref-kabus2022numerical" class="csl-entry"&gt;
&lt;p&gt;Kabus, D., Arno, L., Leenknegt, L., Panfilov, A. V., &amp;amp; Dierckx, H.
(2022). Numerical methods for the detection of phase defect structures
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;(7), 1&amp;ndash;31.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0271351" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0271351&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2024ithildin" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Cloet, M., Zemlin, C., Bernus, O., &amp;amp; Dierckx, H. (2024). The
&lt;span &gt;Ithildin&lt;/span&gt; library for
efficient numerical solution of anisotropic reaction-diffusion problems
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;19&lt;/em&gt;(9), 1&amp;ndash;26.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0303674" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0303674&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2024fast" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., De Coster, T., de Vries, A. A. F., Pijnappels, D. A., &amp;amp;
Dierckx, H. (2024). Fast creation of data-driven low-order predictive
cardiac tissue excitation models from recorded activation patterns.
&lt;em&gt;Computers in Biology and Medicine&lt;/em&gt;, &lt;em&gt;169&lt;/em&gt;, 107949.
&lt;a class="link" href="https://doi.org/10.1016/j.compbiomed.2024.107949" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.compbiomed.2024.107949&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;The code repositories can be found in the data availability statements
of the articles, or on &lt;a class="link" href="https://gitlab.com/heartkor" target="_blank" rel="noopener"
 &gt;https://gitlab.com/heartkor&lt;/a&gt;,
&lt;a class="link" href="https://gitlab.com/dkabus" target="_blank" rel="noopener"
 &gt;https://gitlab.com/dkabus&lt;/a&gt;, and &lt;a class="link" href="https://kabus.eu" target="_blank" rel="noopener"
 &gt;https://kabus.eu&lt;/a&gt;.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Introduction to computational modelling of cardiac excitation waves</title><link>https://kabus.eu/2025/06/10/dissertation-intro/</link><pubDate>Tue, 10 Jun 2025 09:00:00 +0200</pubDate><guid>https://kabus.eu/2025/06/10/dissertation-intro/</guid><description>&lt;img src="https://kabus.eu/2025/06/10/dissertation-intro/cover.svg" alt="Featured image of post Introduction to computational modelling of cardiac excitation waves
" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;This chapter is part of my &lt;a class="link" href="https://kabus.eu/diss" &gt;dissertation&lt;/a&gt;.
The full thesis is available online as a
&lt;a class="link" href="https://dkabus.gitlab.io/thesis-phd/kabus2025dissertation.pdf" target="_blank" rel="noopener"
 &gt;PDF&lt;/a&gt; or
can be read &lt;a class="link" href="https://kabus.eu/diss" &gt;chapter by chapter on this website&lt;/a&gt;.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;div id="sec:medicine"&gt;
&lt;h1 id="basics-of-cardiac-electrophysiology"&gt;Basics of cardiac electrophysiology
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The vital mechanical contraction of the heart is driven by electrical
waves that travel through the heart muscle tissue&amp;mdash;the myocardium. In
sinus rhythm&amp;mdash;the normal heart rhythm&amp;mdash;the heart activates in a
well-choreographed sequence to pump blood effectively to the organs: The
sinoatrial node in the right atrium acts as the pacemaker of the heart
emitting an electrical pulse. The pulse then travels to the left atrium
via Bachmann&amp;rsquo;s bundle, such that both atria contract at the same time.
After the pulse reaches the atrioventricular node, it travels through
the bundle of His and the Purkinje fibres to and through the ventricular
wall, causing the ventricles to contract after the atria (&lt;a class="link" href="#ref-schiebler2005anatomie" &gt;Schiebler,
2005&lt;/a&gt;; &lt;a class="link" href="#ref-zipes2017cardiac" &gt;Zipes &amp;amp; Jalife,
2014&lt;/a&gt;). Photographs of an anatomical model of the
human heart can be found in Fig. &lt;a class="link" href="#fig:heart" &gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:heart"&gt;
&lt;p&gt;&lt;img alt="Anterior view of the human heart" class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="1667" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/heart.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/heart_hu_2435a6c7ea90b351.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/heart_hu_7bef317732664738.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/heart_hu_3b7b42225ce1b46c.png 2400w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/heart.png 2668w" width="2668"&gt;&lt;/p&gt;
&lt;p&gt;Figure 1: &lt;strong&gt;Anterior view of the human heart&lt;/strong&gt; in an anatomical model.
The organ has four chambers: the smaller right (I) and left atria (II)
superior of the larger right (III) and left ventricles (IV). Electrical
waves coordinate its contraction pumping blood to the organs. Blood-flow
is regulated by the opening and closing of valves between the chambers.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Arrhythmias are deviations from this normal heart rhythm. An abnormally
low heart rate is called bradycardia&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, while an abnormally high heart
rate is called tachycardia&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;. &lt;em&gt;Ventricular tachycardia&lt;/em&gt; (VT) is
associated with a high risk of sudden cardiac death and is caused by
re-entrant circuits in the ventricles, i.e., electrical waves that
circulate in the ventricles repeatedly exciting them too early. It can
evolve into &lt;em&gt;ventricular fibrillation&lt;/em&gt; (VF), which is chaotic electrical
activity in the ventricles leading to severely reduced pumping capacity
of the heart and sudden cardiac death if not treated immediately with a
defibrillator. &lt;em&gt;Atrial fibrillation&lt;/em&gt; (AF) is the most common arrhythmia
and is not immediately life-threatening, but it can lead to stroke and
heart failure if not treated properly (&lt;a class="link" href="#ref-zipes2017cardiac" &gt;Zipes &amp;amp; Jalife,
2014&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The field of cardiac electrophysiology studies how electrical waves
propagate through the heart and how they cause arrhythmias. It is a
field that operates on a variety of different levels: from the patient,
to the organ, tissue, cell, and subcellular level. The field is highly
interdisciplinary, combining knowledge from medicine, biology,
chemistry, physics, mathematics, computer science, and engineering. The
goal is to not just understand and diagnose the electrical activation
patterns, but also to control them to ensure the proper working of each
patient&amp;rsquo;s heart.&lt;/p&gt;
&lt;p&gt;In recent years, efforts have been made to create personalised
computational models of the heart, so-called cardiac digital twins,
which could be used to test and optimise treatment strategies for
individual patients (&lt;a class="link" href="#ref-bhagirath2024bits" &gt;Bhagirath et al., 2024&lt;/a&gt;;
&lt;a class="link" href="#ref-sahlicostabal2020eikonalpinns" &gt;Costabal et al., 2020&lt;/a&gt;; &lt;a class="link" href="#ref-gillette2021framework" &gt;Gillette
et al., 2021&lt;/a&gt;; &lt;a class="link" href="#ref-koopsen2024virtual" &gt;Koopsen et al.,
2024&lt;/a&gt;; &lt;a class="link" href="#ref-herreromartin2022eppinns" &gt;Martin et al.,
2022&lt;/a&gt;; &lt;a class="link" href="#ref-niederer2019computational" &gt;Niederer et al.,
2019&lt;/a&gt;; &lt;a class="link" href="#ref-shahi2022machine" &gt;Shahi et al.,
2022&lt;/a&gt;; &lt;a class="link" href="#ref-trayanova2020how" &gt;Trayanova et al.,
2020&lt;/a&gt;). Machine learning based approaches, for
instance, utilising the data from wearable sensors (&lt;a class="link" href="#ref-chen2025transforming" &gt;Chen et al.,
2025&lt;/a&gt;) and other biomedical applications such
as optoelectronics for cardioversion (&lt;a class="link" href="#ref-portero2024optoelectronic" &gt;Portero et al.,
2024&lt;/a&gt;) show promise to impove the
diagnosis and treatment of cardiac arrhythmias and their causes in the
coming years. I have contributed to the concept of cardiac digital twins
in a variety of ways through scientific articles, some of which are
included in this dissertation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the development of numerical software to simulate the electrical
activity of the heart, see
&lt;a class="link" href="https://kabus.eu/2024/09/19/kabus2024ithildin/" &gt;chapter 2&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus, Cloet, et al.,
2024&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;the detection of re-entrant circuits in the heart as phase defects,
see &lt;a class="link" href="https://kabus.eu/2022/07/12/kabus2022numerical/" &gt;chapter 3&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;the description of arrhythmia formation via quasiparticles in
Feynman-like diagrams, see &lt;a class="link" href="https://kabus.eu/2024/11/22/arno2024feynman/" &gt;chapter 4&lt;/a&gt;
(&lt;a class="link" href="#ref-arno2024feynman" &gt;Arno et al., 2024a&lt;/a&gt;), and&lt;/li&gt;
&lt;li&gt;the creation of data-driven models for cardiac electrophysiology
directly from optical voltage mapping data, see
&lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/" &gt;chapter 5&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et al.,
2024&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The remainder of this chapter provides background knowledge that is
helpful to understand the work presented in the published articles. It
begins with a brief overview of cardiac action potentials and central
quantities used to describe them. We then discuss the cell cultures and
experiments that were conducted to obtain the data used for the creation
of the computational models, and how these data are processed. Next, an
overview of conventional in-silico models of cardiac electrophysiology
is given, followed by an introduction into phase mapping. The
introductory chapter concludes with the basics of machine learning on
which the data-driven models are based.&lt;/p&gt;
&lt;div id="sec:waves"&gt;
&lt;h2 id="propagation-of-action-potential-waves"&gt;Propagation of action potential waves
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Excitation waves propagate by neighbouring cells activating each other.
Each heart muscle cell&amp;mdash;cardiac myocyte&amp;mdash;activates and deactivates in
a repeating cycle: the action potential. The activation, also known as
depolarisation, is much quicker than the deactivation, the
repolarisation. The cell&amp;rsquo;s transmembrane voltage
$u$&amp;mdash;in units of &amp;mdash;is the difference in electrical
potential between the inside and the outside of the cell; it is one of
the central quantities in the field of cardiac electrophysiology. During
the action potential of a single cell, the transmembrane voltage first
increases from a resting potential of about to a peak of about exact
values vary between cell types. This is called the upstroke of the
action potential. After the peak, the voltage remains roughly constant
for to the plateau phase, before it decreases back to the resting
voltage (&lt;a class="link" href="#ref-zipes2017cardiac" &gt;Zipes &amp;amp; Jalife, 2014&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We call the time at which $u$ rises above a
threshold, the &lt;em&gt;local activation time&lt;/em&gt; (LAT); and when it falls below
threshold, the &lt;em&gt;local deactivation time&lt;/em&gt; (LDT). The time between a
cell&amp;rsquo;s activation and deactivation is called the &lt;em&gt;action potential
duration&lt;/em&gt; (APD): &lt;span id="eq:apd"&gt;$$
\text{APD}
=
\text{LDT}
-
\text{LAT}
\qquad{(1)}$$&lt;/span&gt; Analogously, we call
the time between deactivation and activation the &lt;em&gt;diastolic interval&lt;/em&gt;
(DI): &lt;span id="eq:di"&gt;$$
\text{DI}
=
\text{LAT}
-
\text{LDT}
\qquad{(2)}$$&lt;/span&gt; The &lt;em&gt;cycle length&lt;/em&gt;
(CL) is the time between two subsequent activations of a cell:
&lt;span id="eq:cl"&gt;$$
\text{CL}
=
\text{LAT}_2
-
\text{LAT}_1
\qquad{(3)}$$&lt;/span&gt; Note that these
quantities depend on the chosen threshold. For example, when measured at
of the upstroke, the APD is more precisely referred to as
APD&lt;sub&gt;30&lt;/sub&gt;
.&lt;/p&gt;
&lt;p&gt;Another central quantity is the &lt;em&gt;conduction velocity&lt;/em&gt; (CV), which is the
speed at which the excitation wave travels through the tissue. It is
usually measured as the average speed of the sharp wave front between
two points in space:
&lt;span id="eq:cv:deltas"&gt;$$
\text{CV}
=
\frac{\Delta x}{\Delta t}
\qquad{(4)}$$&lt;/span&gt; where
$\Delta x$ is the distance between the two points and
$\Delta t$ is the time it takes for the wave front to
travel this distance. This definition is prone to errors when the points
are not well-aligned with the direction of wave propagation. Also, as it
is averaged, it does not capture local variations in CV. More rigorous
definitions exist, for instance, by taking the infinitesimal limit of
the above equation and the length of the velocity vector
${{\bm{{v}}}} \in \mathbb R^{D}$, where
$D$ is the number of spatial dimensions:
&lt;span id="eq:cv"&gt;$$
\text{CV}
=
{{\left\lVert {{\bm{{v}}}} \right\rVert}}
\qquad{(5)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In Fig. &lt;a class="link" href="#fig:ap" &gt;2&lt;/a&gt;, typical action potentials of an atrial model are
shown for four pulses in a cable simulation as functions of space and
time. In the space-time plot in panel C, the CV is measured as the slope
of the wave front. Depending on the timing of the pulses, the APD and CV
varies. The fourth pulse is blocked, i.e., it does not propagate through
the cable.&lt;/p&gt;
&lt;div id="fig:ap"&gt;
&lt;p&gt;&lt;img alt="Atrial action potentials in a cable simulation" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="2100" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/ap.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/ap_hu_4de08719591e3a9a.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/ap_hu_b2b445eea1d1af71.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/ap.png 2100w" width="2100"&gt;&lt;/p&gt;
&lt;p&gt;Figure 2: &lt;strong&gt;Atrial action potentials in a cable simulation.&lt;/strong&gt; These data
were obtained using a numerical simulation of the model by Courtemanche
et al. (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;1998&lt;/a&gt;), as will be introduced in
section &lt;a class="link" href="#sec:rd:numerical" &gt;2.3&lt;/a&gt;. &lt;strong&gt;A.&lt;/strong&gt; Subsequent action potentials
have different APD&lt;sub&gt;30&lt;/sub&gt;
 depending on the previous DI, i.e.,
timing. &lt;strong&gt;B.&lt;/strong&gt; The excitation wave travels through the cable. &lt;strong&gt;C.&lt;/strong&gt; In
a space-time plot of the activation pattern, the CV can be measured as
the slope $\Delta x / \Delta t$ of the wave front. In
this view, it can also easily be seen that the fourth pulse is blocked.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;APD and CV depend on the so-called restitution characteristics which
vary between different cell types. Restitution curves are plots of APD
or CV against the DI or CL, an example of these curves is shown in
Fig. &lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/#fig:fast:restitution" &gt;5.7&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As it has such a big impact on the action potential, the timing of the
stimuli is another important aspect of cardiac electrophysiology. The
so-called stimulus protocol is the sequence of the timings and locations
of the stimuli, usually applied using an electrode. Common protocols are
S1S2 where the tissue is re-excited just behind a part of the wave back
of a first wave, or burst pacing where several stimuli are applied at
the same location in quick succession. Due to inhomogeneities in the
tissue, this might lead to re-entry&amp;mdash;repeated excitation, which will be
discussed below. In &lt;em&gt;stochastic burst pacing&lt;/em&gt; (SBP), stimuli at the same
electrode location are applied at random intervals to record the
response of the tissue to a large variety of timings to get a more
complete picture of the cells&amp;rsquo; behaviour in unusual settings (&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De
Coster, et al., 2024&lt;/a&gt;).&lt;/p&gt;
&lt;div id="sec:medicine:cells"&gt;
&lt;h2 id="a-model-cell-line-of-human-atrial-myocytes"&gt;A model cell line of human atrial myocytes
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;To study the electrical properties of cardiomyocytes, it is common to
use model cells that can be relatively easily obtained, cultured, and
manipulated in the laboratory. There is a wide variety of cells in use,
for example neonatal rat ventricular myocytes (NRVMs) (&lt;a class="link" href="#ref-majumder2016model" &gt;Majumder et al.,
2016&lt;/a&gt;), or pluripotent stem cell-derived
cardiomyocytes (PSC-CMs) (&lt;a class="link" href="#ref-karakikes2015human" &gt;Karakikes et al.,
2015&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;At Leiden University Medical Center, a new cell line was recently
developed that was derived from human fetal atrial tissue which was
conditionally immortalised using a lentiviral vector-based system. These
so-called human immortalised atrial myocytes (hiAMs) are more
representative of human atrial myocytes than other cells enabling their
use in a wide range of experiments with cells (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al.,
2022&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;hiAMs are monoclonal, meaning that they are derived from a single cell
and are hence genetically identical. This leads to a high consistency in
phenotypic properties of the cells, such as their CV and APD. They also
posses superior electrophysiological properties compered to human
embryonic stem cell-derived atrial myocytes (hESC-AMs) or human induced
pluripotent stem cell-derived atrial myocytes (hiPSC-AMs). Observed CVs
of hiAMs are around with APD&lt;sub&gt;80&lt;/sub&gt;
 of compared to at similar
APDs for hESC-AMs (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al., 2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;hiAMs can be expanded almost indefinitely as de-differentiated cells in
the presence of the inducing agent doxycycline, and upon its removal,
they re-differentiate into functional cardiomyocytes. This allows for
the creation of large quantities of cells for experiments, such as the
creation of monolayers&amp;mdash;one-cell-thick layers grown on a flat surface.
As the cells are randomly oriented in the monolayer, the resulting
two-dimensional and approximately homogeneous and isotropic tissue can
be used to study action potential propagation and re-entry in a
controlled way. One use of these monolayers is to study the effects of
pro- or anti-arrhythmic drugs on the electrical properties (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et
al., 2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;A visual outline of the creation of hiAMs is given in figure 1 of the
article introducing the cell line (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al.,
2022&lt;/a&gt;): After the cells are isolated from a human
fetus, they are transduced with a lentiviral vector encoding the
recombinant simian virus 40 large T (SV40LT) antigen under the control
of a doxycycline-inducible promoter. The effect of SV40LT on the cells
is that they continuously divide. Cell clones are filtered based on
selection criteria, such as the ability to proliferate in a
doxycycline-dependant manner and to undergo cardiomyogenic
differentiation into excitable and contractile cells. The selected cells
now have the ability to proliferate in the presence of doxycycline and
to differentiate into functional atrial myocytes upon its removal, i.e.,
without SV40LT expression (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al.,
2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The hiAM cell lines are a promising new tool for studying the electrical
properties of the human atria. In
&lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/" &gt;chapter 5&lt;/a&gt;, optical voltage mapping of
focal waves in hiAM monolayers was used as an in-vitro data set to train
a data-driven in-silico model. The spiral waves predicted by that model
were compared to spiral waves in hiAM monolayers (&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et
al., 2024&lt;/a&gt;). In the following section, we will
present some experiments that are commonly performed to measure the
electrophysiological activity of cardiomyocytes, such as patch-clamping
and optical mapping, which are relevant for the work in this project.&lt;/p&gt;
&lt;div id="sec:experiments"&gt;
&lt;h2 id="common-experiments-in-cardiac-electrophysiology"&gt;Common experiments in cardiac electrophysiology
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Experiments in the discipline of medicine are often graded on a scale
from most-invasive to least-invasive as follows, see also
Fig. &lt;a class="link" href="#fig:experiments:scale" &gt;3&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;In-vivo&lt;/strong&gt; experiments are performed on living organisms, usually
laboratory animals. This is the most realistic setting, but also the
most invasive, expensive, and ethically challenging.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ex-vivo&lt;/strong&gt; experiments are performed on tissue samples or organs
extracted from organisms that is artificially kept alive outside of
the animal. This still requires animal sacrifice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In-vitro&lt;/strong&gt; experiments are performed &amp;ldquo;in the glass&amp;rdquo;&amp;mdash;i.e., on
isolated cells or tissues that are kept alive in a culture dish.
Cell lines are cultured to study the behaviour of (populations of)
individual cells.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In-silico&lt;/strong&gt; experiments are performed on computers. The term
refers to the use of silicon in computer chips. This is naturally
the least invasive method, but also the most abstract. In-silico
models must be created using in-vivo, ex-vivo, or in-vitro data and
validated against them.&lt;/li&gt;
&lt;/ol&gt;
&lt;div id="fig:experiments:scale"&gt;
&lt;p&gt;&lt;img alt="Scale of the invasiveness of medical experiments" class="gallery-image" data-flex-basis="685px" data-flex-grow="285" height="737" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/experiments.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/experiments_hu_52f0f5b20c025381.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/experiments_hu_3d1cf47c232e51f3.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/experiments.png 2106w" width="2106"&gt;&lt;/p&gt;
&lt;p&gt;Figure 3: &lt;strong&gt;Scale of the invasiveness of medical experiments.&lt;/strong&gt; The
scale ranges from most invasive on the left to least invasive on the
right.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In this dissertation, we focus on in-silico experiments motivated by
in-vivo, ex-vivo, and in-vitro experiments. In the following sections,
we will briefly introduce the types of experiments that are the most
relevant for the research presented in this dissertation.&lt;/p&gt;
&lt;div id="sec:patch:clamping"&gt;
&lt;h3 id="measurement-of-single-cell-behaviour-using-patch-clamping"&gt;Measurement of single-cell behaviour using patch clamping
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Patch clamping is an in-vitro or ex-vivo technique to measure the
electrical activity of a single cell. Under a microscope, a glass
pipette is carefully attached to the cell membrane. Depending on the
quantity that should be measured, the pipette can either leave the cell
membrane intact, for instance, to measure the activity of individual ion
channels, or penetrate the cell membrane to measure the activity of the
entire cell. As the pipette is filled with a solution that conducts
electricity, the electrical response of the cell to an applied voltage
can be measured (&lt;a class="link" href="#ref-hill2021introduction" &gt;Hill &amp;amp; Stephens, 2021&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Patch clamping was used to measure electrical properties of hiAMs, such
as various ionic currents to compare their electrophysiology with that
of other cell types. As these cells are an in-vitro model of human
atrial myocytes, they should behave similarly to the cells they aim to
model. Patch-clamping was therefore mainly used as a tool to validate
the hiAMs as a new in-vitro model in the original publication
introducing them by Harlaar et al. (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;2022&lt;/a&gt;). This
validation justifies the use of hiAMs for future electrophysiological
experiments.&lt;/p&gt;
&lt;p&gt;Fig. &lt;a class="link" href="#fig:patch:clamp" &gt;4&lt;/a&gt; shows how the steady-state current is
obtained for a hiAM. A voltage step protocol is applied to stimulate the
cell, and the current over time is measured. After an initial transient
phase, the current stabilises to the steady-state current. The result of
this experiment is a current-voltage curve describing the specific
current across the membrane as a function of the applied voltage.&lt;/p&gt;
&lt;div id="fig:patch:clamp"&gt;
&lt;p&gt;&lt;img alt="Measurement of the steady-state current of hiAMs using patch clamping" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2400" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/patch-clamp.Iss.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/patch-clamp.Iss_hu_c6b4dacc37f0edb4.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/patch-clamp.Iss_hu_8d0ce83da97b0360.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/patch-clamp.Iss.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 4: &lt;strong&gt;Measurement of the steady-state current of hiAMs using patch
clamping&lt;/strong&gt;. &lt;strong&gt;A.&lt;/strong&gt; The voltage is varied in steps from to and held for .
&lt;strong&gt;B.&lt;/strong&gt; The specific current across the membrane is measured for each
voltage step. &lt;strong&gt;C.&lt;/strong&gt; Steady-state current as a function of voltage.
Experimental data from Harlaar et al. (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;2022&lt;/a&gt;),
recorded at Amsterdam Medical Center.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Since the publication of Harlaar et al. (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;2022&lt;/a&gt;),
additional patch-clamp experiments have been performed to measure a
greater variety of ionic currents in hiAMs. These data are currently
being analysed and will be published in a follow-up paper which will
introduce a new in-silico electrophysiological model of hiAMs (&lt;a class="link" href="#ref-decoster2025ionic" &gt;De
Coster et al., in preparation&lt;/a&gt;). The in-silico
model will follow the classical approach to design a mathematical model
of the cells&amp;rsquo; electrophysiology to work in the context of the bi- and
monodomain description which will be introduced in
section &lt;a class="link" href="#sec:continuum" &gt;2&lt;/a&gt;.&lt;/p&gt;
&lt;div id="sec:ovm"&gt;
&lt;h3 id="mapping-techniques-for-tissue-level-electrical-excitation-waves"&gt;Mapping techniques for tissue-level electrical excitation waves
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;To study the propagation of excitation waves in cardiac tissue, its
electrical activity must be recorded simultaneously at multiple
locations. As the electrical activity over space is recorded, this is
called mapping. While the transmembrane voltage can not easily be
measured directly for mapping, we instead measure by proxy.&lt;/p&gt;
&lt;p&gt;On the one hand, electrodes can be used to record the electrical
potential in so-called electrograms (EGMs) at different locations, see
also section &lt;a class="link" href="#sec:bidomain" &gt;2.1&lt;/a&gt;. The electrodes may be placed on the
surface of the tissue or inserted into the tissue. This can be done
in-vitro, ex-vivo, or even in-vivo. The electrodes are often arranged in
a grid or linear patterns. Catheters with multiple electrodes can be
inserted into the heart, such as the PentaRay catheter by Biosense
Webster with a 5-star-shaped array of 20 electrodes or the HD Grid
catheter by Abbott with a 4x4 grid of electrodes (&lt;a class="link" href="#ref-berte2020impact" &gt;Berte et al.,
2020&lt;/a&gt;). Recordings from multiple beats can be
combined to create phase maps of recurring patterns of activation, see
also section &lt;a class="link" href="#sec:phase:analysis" &gt;3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On the other hand, optical mapping techniques usually record the
fluorescence of voltage- or Ca&lt;sup&gt;2+&lt;/sup&gt;
-sensitive dyes (&lt;a class="link" href="#ref-entcheva2021cardiac" &gt;Entcheva
&amp;amp; Kay, 2021&lt;/a&gt;). A commonly used potentiometric
dye is di-4-ANEPPS, which, when it absorbs light in blue to green
wavelengths, emits red light whose intensity changes in a way that is
approximately proportional to the transmembrane potential (&lt;a class="link" href="#ref-loew1996potentiometric" &gt;Loew,
1996&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The setup for optical mapping typically consists of the following
components: A light source, such as a halogen lamp, whose light may need
to be filtered to the desired wavelengths. A dichroic mirror reflects
the excitation light to the sample, while allowing the emission light to
pass through. An emission filter also blocks the excitation light and
only allows the desired, emitted wavelengths to pass through to the
camera. The camera and a stimulation mechanism such as an electrode are
controlled by a computer. A photograph of a simple optical mapping setup
is shown in Fig. &lt;a class="link" href="#fig:ovm:setup" &gt;5&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:ovm:setup"&gt;
&lt;p&gt;&lt;img alt="Optical mapping setup" class="gallery-image" data-flex-basis="286px" data-flex-grow="119" height="503" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/ovm-setup.jpg" width="600"&gt;&lt;/p&gt;
&lt;p&gt;Figure 5: &lt;strong&gt;Optical mapping setup&lt;/strong&gt; with a camera out of frame at the
top, green light from the top, lenses for focusing and magnification,
and the sample&amp;mdash;a 24-well plate. As a simple mechanism for stimulating
the tissue, a bipolar electrode is placed in the well. The camera and
electrodes are controlled by a computer. To keep the tissue at body
temperature, the sample is placed on a heating plate.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Both high temporal and spatial resolution are required for optically
mapping the electrical activity of cardiac tissue, fast enough to
capture the rapid changes over time and fine enough to capture the
details of wave propagation through the tissue. The amount of noise is
higher at higher resolutions due to less photons being collected per
pixel and frame. Frame rates used for the data collected in this work
are in the range of 1 to per frame. The spatial resolution is typically
around 150 to per pixel, depending on the choice of lenses and camera.
For example, the MiCAM05-Ultima camera by SciMedia has a resolution of
100x100 pixels onto which the imaging plane is projected (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et
al., 2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;As an example of the data that can be recorded with optical mapping, we
show in Fig. &lt;a class="link" href="#fig:ovm" &gt;6&lt;/a&gt; a sequence of snapshots of the electrical
activity in a hiAM monolayer in a 6-well dish. This experiment shows the
formation of a figure-of-eight spiral wave under burst pacing. During
subsequent pulses, the gap of blocked conduction between the two sides
of a wave front builds up to the point where there is enough space for
the front to turn in on itself, creating a pair of spirals.&lt;/p&gt;
&lt;div id="fig:ovm"&gt;
&lt;p&gt;&lt;img alt="Figure-of-eight spiral formation under burst pacing in hiAM monolayers" class="gallery-image" data-flex-basis="252px" data-flex-grow="105" height="1710" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/optical.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/optical_hu_ee5f424f819d3480.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/optical_hu_be3f284cbc68540.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/experiments/optical.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 6: &lt;strong&gt;Figure-of-eight spiral formation under burst pacing in hiAM
monolayers&lt;/strong&gt; in a 6-well dish. &lt;strong&gt;A.&lt;/strong&gt; The stimulation protocol in gray
consists of three pulses at labelled S1-3, followed by a burst of 20
pulses at , B1-20. These stimuli trigger focal waves emanating from the
electrode at the top left in the frame. The response of the central
pixel is shown in purple. &lt;strong&gt;B.-I.&lt;/strong&gt; Snapshots of the activity at the
times indicated by the thin black lines in &lt;strong&gt;A&lt;/strong&gt;. Frames are chosen at
times when an excitation wave crosses a region of interest to show the
build-up to figure-of-eight spiral wave formation from pulse to pulse.
&lt;strong&gt;E.&lt;/strong&gt; At the top left, a spiral wave forms in sync with the pacing,
labelled R1. &lt;strong&gt;F.-I.&lt;/strong&gt; The gap between the two parts of the wave front
is so wide, that in the next frames, the wave front can turn around and
merge with the next wave front, forming a figure-of-eight spiral wave.
&lt;strong&gt;H.&lt;/strong&gt; The two spirals in the figure-of-eight spiral wave are labelled
R2 and R3.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In contrast to single cell measurements, optical mapping can capture the
complex patterns of excitation waves in tissue. The data are
particularly rich as each pixel may have a different time series of
excitation and average cell properties, providing a large variability in
the data. This variability can be used in the development of data-driven
methods to model the electrical activity of cardiac tissue, a main focus
of this work.&lt;/p&gt;
&lt;div id="sec:processing"&gt;
&lt;h2 id="processing-and-analysis-of-mapping-data"&gt;Processing and analysis of mapping data
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Especially at higher resolutions, optical mapping recordings can be so
noisy and obscured by other artefacts making it difficult to extract
useful information from them. To focus on the relevant parts of the
data, there are a variety of processing steps that can be applied. It is
important to balance the removal of noise with preservation of the
signal without distortion.&lt;/p&gt;
&lt;p&gt;One of the most used steps in data processing is smoothing which gets
its name from making noisy, jagged data smoother. This is typically done
by applying an averaging filter to the data: The smoothed value at a
given point is the average of the values of the data points in a small
neighbourhood around it. A larger neighbourhood will result in smoother
data, but the signal will be less clear, i.e., blurred. If the
neighbourhood is too small, the noise will not be removed effectively.
Smoothing and blurring are, mathematically speaking, the same operation,
which is described by the diffusion equation, also known as the heat
equation (Eq. &lt;a class="link" href="#eq:heat" &gt;27&lt;/a&gt;). Smoothing can also be done in the
frequency domain by applying a low-pass filter, for instance via the
Fourier transform. Optical mapping data can be smoothed in time and the
two spatial dimensions, note however that smoothing in time violates the
causality of the data, meaning that the smoothed data at a given time
point will depend on future data points.&lt;/p&gt;
&lt;p&gt;A way to smoothen data without violating causality is to use an
&lt;em&gt;exponential moving average&lt;/em&gt; (EMA). The EMA is a recursive filter that
gives more weight to recent data points. The EMA of a time series
$u(t)$ at time $t$ is defined as
(&lt;a class="link" href="#ref-heckert2002handbook" &gt;Heckert et al., 2002&lt;/a&gt;):
&lt;span id="eq:ema"&gt;$$
s(t) = \alpha \, u(t) + [1-\alpha] \, s(t-\Delta t)
\qquad{(6)}$$&lt;/span&gt; where
$s(t)$ is the smoothed data,
$\alpha$ is the smoothing factor, and
$\Delta t$ is the time step. The EMA gets its name
from the fact that the weight of the contribution of each data point to
the smoothed value decreases exponentially over time. This can be seen
if Eq. &lt;a class="link" href="#eq:ema" &gt;6&lt;/a&gt; is rewritten as:
&lt;span &gt;$$
\dot s(t)
=
\tilde\alpha \, u(t) - \tilde\alpha \, s(t)
\qquad{(7)}$$&lt;/span&gt; defining
$\tilde\alpha = \frac{\alpha}{\Delta t}$.
Multiplyling by ${{\mathrm{e}^{\tilde\alpha t}}}$ and
integrating yields: &lt;span &gt;$$
s(t)
=
{{\mathrm{e}^{-\tilde\alpha t}}} \, u(0)
+
\tilde\alpha
\int_0^t
 {{\mathrm{e}^{\tilde\alpha \, (t' - t)}}} \, u(t')
\;\mathrm{d}t'
\qquad{(8)}$$&lt;/span&gt; Hence, the EMA really
is a weighted average of the previous data points, with exponentially
decaying weights. As it can be efficiently implemented using the
recursive formula in Eq. &lt;a class="link" href="#eq:ema" &gt;6&lt;/a&gt;, the EMA is a popular choice for
smoothing data in real-time applications, such as optical mapping.&lt;/p&gt;
&lt;p&gt;Statistical data transformation techniques can also be used to improve
the quality of the data. It is common to remove the mean along each
dimension in the data and rescale to unit variance. This is called
whitening (&lt;a class="link" href="#ref-abu2012learning" &gt;Abu-Mostafa et al., 2012&lt;/a&gt;). For
instance, in optical mapping data, the recorded intensity at points that
are further away from the camera will be lower than those closer to it.
After whitening each pixel by dividing by the standard deviation of its
signal over time, the data will have the same variance at each point.
This can also be useful for comparing data from different experiments.&lt;/p&gt;
&lt;p&gt;To be able to compare optical mapping recordings with electrode-based
EGM maps, we can calculate approximate monopolar pseudo-EGMs via a
convolution: &lt;span id="eq:egm"&gt;$$
u_\text{EGM}({{\bm{{x}}}}, t)
\propto
\int_{\heartsuit} \mathrm{d}{{\bm{{x}}}}' \;
\frac{
 \nabla \cdot {{\bm{{D}}}} \nabla u(t, {{\bm{{x}}}}')
}{
 {{\left\lVert {{\bm{{x}}}} - {{\bm{{x}}}}' \right\rVert}}
}
\qquad{(9)}$$&lt;/span&gt; where
${{\bm{{x}}}}$ is the position of the electrode,
$\heartsuit$ is the tissue domain,
${{\bm{{D}}}}$ is the diffusion matrix, and
$u$ is the signal representing the transmembrane
voltage. These monopolar pseudo-EGMs may be converted to bipolar EGMs by
subtracting a reference EGM from each pseudo-EGM. The reference EGM can
for instance be any one of the EGMs or the average of all pseudo-EGMs.
For more details and additional context, see
section &lt;a class="link" href="#sec:bidomain" &gt;2.1&lt;/a&gt; and &lt;a class="link" href="https://kabus.eu/2024/09/19/kabus2024ithildin/#sec:ithildin:egm" &gt;chapter 2&lt;/a&gt;,
(&lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus, Cloet, et al., 2024&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Many quantities of interest in cardiac electrophysiology can be simply
obtained via thresholding and differences, such as LAT, LDT, APD, DI,
and CL (section &lt;a class="link" href="#sec:waves" &gt;1.1&lt;/a&gt;). The CV (Eq. &lt;a class="link" href="#eq:cv" &gt;5&lt;/a&gt;) is a
quantity that is highly sensitive to noise and artefacts in the data. An
elegant algorithm to estimate the velocity vector from LAT maps&amp;mdash;a
scalar field $T({{\bm{{x}}}})$ in space
${{\bm{{x}}}} \in \mathbb R^{D}$&amp;mdash;is the method by
Bayly et al. (&lt;a class="link" href="#ref-bayly1998estimation" &gt;1998&lt;/a&gt;). The gradient
$\nabla T$ of this field is the &amp;ldquo;slowness&amp;rdquo;&amp;mdash;a vector
pointing in the same direction as ${{\bm{{v}}}}$, but
with the inverse value. We can then obtain the velocity vector via the
relation: &lt;span id="eq:cv:bayly"&gt;$$
\begin{aligned}
{{\bm{{v}}}} &amp;= \frac{\nabla T}{{{\left\lVert \nabla T \right\rVert}}^2}
\end{aligned}
\qquad{(10)}$$&lt;/span&gt; However, as LAT
increases in discrete steps such that neighbouring grid points either
have the same LAT or differ by one or more steps, the gradient is not
well-defined. To overcome this, the data can either be smoothed or
interpolated for instance by fitting a linear function to the data in a
small neighbourhood around each grid point, which is the approach by
Bayly et al. (&lt;a class="link" href="#ref-bayly1998estimation" &gt;1998&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In Fig. &lt;a class="link" href="#fig:cv" &gt;7&lt;/a&gt;, the CV is estimated from LAT and LDT maps of a
pulse in the same optical voltage mapping recording of a hiAM monolayer
as in Fig. &lt;a class="link" href="#fig:ovm" &gt;6&lt;/a&gt;. Linear functions&amp;mdash;planes&amp;mdash;are fitted at each
grid point to the neighbouring LAT and LDT values. We use this to get a
smooth version of the LAT and LDT maps, as well as the CV via the slope
of these planes. It can be seen that in the region of interest where the
figure-of-eight reentry forms, the CV of both the wave front and back is
lower than in the rest of the tissue, while the APD is prolonged.&lt;/p&gt;
&lt;div id="fig:cv"&gt;
&lt;p&gt;&lt;img alt="Estimation of CV for noisy optical mapping data" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="1800" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/cv.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/cv_hu_3c65043818655ef4.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/cv_hu_7e838318819c81aa.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/medicine/cv.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 7: &lt;strong&gt;Estimation of CV for noisy optical mapping data&lt;/strong&gt; for the
same recording as in Fig. &lt;a class="link" href="#fig:ovm" &gt;6&lt;/a&gt;. &lt;strong&gt;A.&lt;/strong&gt; Parts of three
subsequent excitation waves are passing through the tissue, seen here in
the optical signal $u$. &lt;strong&gt;B.&lt;/strong&gt; The smoothed LAT map
of pulse B5. &lt;strong&gt;C.&lt;/strong&gt; The smoothed LDT map of pulse B5. &lt;strong&gt;D.&lt;/strong&gt; APD of
pulse B5, i.e., the difference of LDT and LAT, is prolonged in the
circled region of interest. &lt;strong&gt;E.&lt;/strong&gt; CV of the wave front of pulse B5 is
lower in the region of interest. &lt;strong&gt;F.&lt;/strong&gt; The same is true for the CV of
the wave back at higher variance.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In the course of this PhD project, besides the main contributions of
models of the excitation waves&amp;mdash;the reaction-diffusion solvers
&lt;a class="link" href="https://gitlab.com/pigreads/pigreads" target="_blank" rel="noopener"
 &gt;Pigreads&lt;/a&gt; and
&lt;a class="link" href="https://gitlab.com/heartkor/ithildin" target="_blank" rel="noopener"
 &gt;Ithildin&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus, Cloet, et al.,
2024&lt;/a&gt;) and the data-driven model creation
pipeline &lt;a class="link" href="https://gitlab.com/heartkor/distephym" target="_blank" rel="noopener"
 &gt;Distephym&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De
Coster, et al., 2024&lt;/a&gt;), to be introduced in the
following sections&amp;mdash;we have developed various companion software
packages to process and analyse the data obtained from the
aforementioned experiments: mainly patch clamping, optical mapping, and
in-silico simulations. These packages, which contain the methods
introduced in this section and more, are (1) the &lt;a class="link" href="https://gitlab.com/heartkor/py_ithildin" target="_blank" rel="noopener"
 &gt;Python module for
Ithildin&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et al.,
2024&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus, Cloet, et al.,
2024&lt;/a&gt;), a Python package to process and analyse
excitation wave data, originally designed for data from the
reaction-diffusion solver Ithildin and (2)
&lt;a class="link" href="https://gitlab.com/heartkor/sappho" target="_blank" rel="noopener"
 &gt;Sappho&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et al.,
2024&lt;/a&gt;), another Python package to process and
analyse optical mapping data. Both packages are compatible with each
other. Just as the main contributions, these packages are open-source
and available on &lt;a class="link" href="https://gitlab.com/heartkor" target="_blank" rel="noopener"
 &gt;GitLab&lt;/a&gt;.&lt;/p&gt;
&lt;div id="sec:continuum"&gt;
&lt;h1 id="in-silico-models-of-cardiac-electrophysiology"&gt;In-silico models of cardiac electrophysiology
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;A common way to model the electrical activation patterns that control
the mechanical contraction of the heart is the reaction-diffusion
equation in the monodomain description. It arises from a number of
assumptions about the nature of the electric potentials and ion
concentrations in the heart muscle tissue. In this section, we will give
a derivation of the monodomain equations from first principles. We will
also illustrate how to numerically solve them and present typical
solutions to the monodomain equations.&lt;/p&gt;
&lt;div id="sec:bidomain"&gt;
&lt;h2 id="bidomain-descriptionthe-cell-as-an-electrical-circuit"&gt;Bidomain description&amp;mdash;the cell as an electrical circuit
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The first assumption we usually make to describe the electrical activity
in the heart&amp;rsquo;s cells is that the ion concentrations and arising
potentials are continuous across the tissue, i.e., instead of looking at
the microscopic structure of each cell, we instead zoom out to the
mesoscopic tissue scale. The motivation for this is that the activating
cells locally show similar behaviour overall&amp;mdash;neighbouring cells
usually fire together (&lt;a class="link" href="#ref-tung1978bidomain" &gt;Tung, 1978&lt;/a&gt;). With this
assumption, we can now define the electric potentials
$u_\text{i}(t, {{\bm{{x}}}})$ on the interior of the
cell continuum and $u_\text{e}(t, {{\bm{{x}}}})$ on
the exterior, in units of ${\mathrm{{m}{V}}}$
(&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;; &lt;a class="link" href="#ref-neu1993homogenization" &gt;Neu &amp;amp; Krassowska,
1993&lt;/a&gt;). These potentials are also commonly
referred to as the intra-cellular and extra-cellular potentials,
respectively.&lt;/p&gt;
&lt;p&gt;The sketch in Fig. &lt;a class="link" href="#fig:bidomain" &gt;8&lt;/a&gt; shows how the interior and
exterior are separated by the cell membrane which consists of a lipid
bilayer&amp;mdash;modelled as a capacitor, and protein structures which regulate
the flow of ions across the cell membrane, i.e., the total ion current
$I_\text{ion}$ per unit volume in
${\mathrm{{A}{/}{m}^3}}$. The membrane has a
capacitance per unit volume of
$C=\beta_\text{m} C_\text{m}$ in
${\mathrm{{F}{/}{m}^3}}$, obtained from the
product of the specific cell membrane capacitance
$C_\text{m}$ in
${\mathrm{{F}{/}{m}{^2}}}$ and the ratio
$\beta_\text{m}$ in
${\mathrm{\frac{1}{m}}}$ of the cells&amp;rsquo; surface area
to their volume (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;). The
behaviour of the ion channels in the membrane is quite complex and
depends not just on the potentials and ion concentrations, but also on
whether or not the structures act like an open or closed &amp;ldquo;gate&amp;rdquo;, which
is encoded in so-called gating variables. The collective behaviour of
the ion channels is described by a cell model for cardiac
electrophysiology, which was pioneered by Hodgkin &amp;amp; Huxley
(&lt;a class="link" href="#ref-hodgkin1952quantitative" &gt;1952&lt;/a&gt;) and iterated over in the
following decades. In section &lt;a class="link" href="#sec:models:phenomenological" &gt;2.4.3&lt;/a&gt; and
section &lt;a class="link" href="#sec:models:ionic" &gt;2.6&lt;/a&gt;, we will provide more detail about a
variety of different cell models. The total current across the cell
membrane is $C\partial_t
u + I_\text{ion}$.&lt;/p&gt;
&lt;div id="fig:bidomain"&gt;
&lt;p&gt;&lt;img alt="Sketch of the main quantities in the bidomain description" class="gallery-image" data-flex-basis="640px" data-flex-grow="266" height="656" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/bidomain.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/bidomain_hu_2c6dea57a184db23.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/bidomain_hu_98d9e477a3e36528.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/bidomain.png 1750w" width="1750"&gt;&lt;/p&gt;
&lt;p&gt;Figure 8: &lt;strong&gt;Sketch of the main quantities in the bidomain description.&lt;/strong&gt;
On the left, a close-up view of the cell membrane is depicted which, on
the right, is represented by an electical circuit. The membrane
separates the cells&amp;rsquo; interior from the exterior such that we consider
different ion concentrations in each. The lipid bilayer acts like a
capacitor $C$ and the protein structures control the
ionic currents $I_\text{ion}$, which are here
depicted as an adaptive resistor $R$. The difference
between the interior and exterior potentials,
$u_\text{i}$ and $u_\text{e}$
respectively, is called the transmembrane voltage
$u = u_\text{i} - u_\text{e}$. The total current
across the cell membrane is $C\partial_t u +
 I_\text{ion}$. Adapted from Hodgkin &amp;amp; Huxley
(&lt;a class="link" href="#ref-hodgkin1952quantitative" &gt;1952&lt;/a&gt;) and Alberts et al.
(&lt;a class="link" href="#ref-alberts2002molecular" &gt;2002&lt;/a&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;To each of the electric fields on the interior
$-\nabla u_\text{i}$ and exterior
$-\nabla u_\text{e}$ in units of
${\mathrm{{V}{/}{m}}}$, we can apply Ohm&amp;rsquo;s law to
obtain the current densities
$-{{\bm{{\sigma}}}}_\text{i} \nabla u_\text{i}$ and
$-{{\bm{{\sigma}}}}_\text{e} \nabla
u_\text{e}$ in units of
${\mathrm{{A}{/}{m}{^2}}}$. We denote the
conductivity tensors as ${{\bm{{\sigma}}}}_\text{i}$
and ${{\bm{{\sigma}}}}_\text{e}$, for the interior
and exterior respectively, in units of
${\mathrm{{S}{/}{m}}} = {\mathrm{\frac{1}{{\Omega}{/}{m}}}}$
(&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;). These general
conductivity tensors enable anisotropic conduction, i.e., current can
spread more quickly in some directions, such as along a fibre direction
versus across them. More details on the influence of this tensor on the
solutions ${{\underline{{u}}}}$ will be provided in
section &lt;a class="link" href="#sec:inhom" &gt;2.5&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As the current and charge are conserved, the total current across the
cell membrane $C\partial_t u + I_\text{ion}$ takes
the role of a source term for current densities on the exterior and a
sink term on the interior. Therefore, for the divergence of the current
densities, we obtain:
&lt;span id="eq:bidomain:pre"&gt;$$
\nabla\cdot{{\bm{{\sigma}}}}_\text{i} \nabla u_\text{i}
=
-\nabla\cdot{{\bm{{\sigma}}}}_\text{e} \nabla u_\text{e}
=
C\partial_t [u_\text{i} - u_\text{e}] + I_\text{ion}
\qquad{(11)}$$&lt;/span&gt; By expressing
Eq. &lt;a class="link" href="#eq:bidomain:pre" &gt;11&lt;/a&gt; in terms of the transmembrane voltage
$u$ and the extra-cellular potential
$u_\text{e}$, we obtain on the domain
$\heartsuit\subset\mathbb R^3$ and for duration
$T$ in ${\mathrm{{m}{s}}}$:
&lt;span id="eq:bidomain"&gt;$$
\begin{aligned}
C\partial_t u
&amp;=
\nabla\cdot{{\bm{{\sigma}}}}_\text{i}\nabla[u + u_\text{e}]
- I_\text{ion}
&amp; \text{on}\,\heartsuit\times[0,T]
&amp; \;\;\;\text{(A)}
\\
-\nabla\cdot[{{\bm{{\sigma}}}}_\text{i} + {{\bm{{\sigma}}}}_\text{e}] \nabla u_\text{e}
&amp;=
\nabla\cdot{{\bm{{\sigma}}}}_\text{i} \nabla u
&amp; \text{on}\,\heartsuit\times[0,T]
&amp; \;\;\;\text{(B)}
\\
0
&amp;=
{{\bm{{n}}}} \cdot
{{\bm{{\sigma}}}}_\text{i}\nabla[u + u_\text{e}]
&amp; \text{on}\,\partial\heartsuit\times[0,T]
&amp; \;\;\;\text{(C)}
\\
0
&amp;=
{{\bm{{n}}}} \cdot
{{\bm{{\sigma}}}}_\text{e}\nabla u_\text{e}
&amp; \text{on}\,\partial\heartsuit\times[0,T]
&amp; \;\;\;\text{(D)}
\\
u
&amp;=
u_\text{init}
&amp; \text{on}\,\heartsuit\times\{0\}
&amp; \;\;\;\text{(E)}
\\
u_\text{e}
&amp;=
u_\text{e,init}
&amp; \text{on}\,\heartsuit\times\{0\}
&amp; \;\;\;\text{(F)}
\end{aligned}
\qquad{(12)}$$&lt;/span&gt; where, using the
normal vector ${{\bm{{n}}}}$ on
$\partial\heartsuit$, we have added the boundary
condition that no currents may leave the domains, and initial
conditions. This is called the &lt;em&gt;bidomain continuum description&lt;/em&gt; of
activating tissue, due to the assumption of continuous quantities across
the two domains outside and inside the cells (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;). The boundary conditions for the
extra-cellular potential (Eq. &lt;a class="link" href="#eq:bidomain" &gt;12&lt;/a&gt; D), can further be
generalised to couple to the electrical potential around the organ, in
the so-called bath (&lt;a class="link" href="#ref-tung1978bidomain" &gt;Tung, 1978&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Note that the two main variables in the bidomain equations, the
transmembrane voltage $u$ and the extra-cellular
potential $u_\text{e}$, are strongly coupled to each
other in Eq. &lt;a class="link" href="#eq:bidomain" &gt;12&lt;/a&gt; B. Their dynamics only differ due to the
discrepancy in anisotropy in
${{\bm{{\sigma}}}}_\text{i}$ and
${{\bm{{\sigma}}}}_\text{e}$.&lt;/p&gt;
&lt;p&gt;The bidomain equations can be solved with a variety of different
numerical methods (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;). For
instance, a temporal step
$t \rightarrow t + \Delta t$ in a naive forward Euler
scheme could consist of these tasks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Calculate the diffusion term: &lt;span &gt;$$
 I_\text{i} = \nabla\cdot{{\bm{{\sigma}}}}_\text{i}\nabla[u + u_\text{e}]
 \qquad{(13)}$$&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update $u$ based on Eq. &lt;a class="link" href="#eq:bidomain" &gt;12&lt;/a&gt; A:
&lt;span &gt;$$
 u \leftarrow u + \Delta t [I_\text{i} + I_\text{ion}]
 \qquad{(14)}$$&lt;/span&gt; respecting the
no-flux boundary condition Eq. &lt;a class="link" href="#eq:bidomain" &gt;12&lt;/a&gt; C.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Calculate the diffusion term: &lt;span &gt;$$
 I_u = \nabla\cdot{{\bm{{\sigma}}}}_\text{i} \nabla u
 \qquad{(15)}$$&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update $u_\text{e}$ by solving the generalised
Poisson equation based on Eq. &lt;a class="link" href="#eq:bidomain" &gt;12&lt;/a&gt; B:
&lt;span &gt;$$
 \nabla\cdot{{\bm{{\sigma}}}} \nabla u_\text{e} = -I_u
 \qquad{(16)}$$&lt;/span&gt; with
${{\bm{{\sigma}}}} = {{\bm{{\sigma}}}}_\text{i} + {{\bm{{\sigma}}}}_\text{e}$,
respecting the no-flux boundary condition Eq. &lt;a class="link" href="#eq:bidomain" &gt;12&lt;/a&gt; C.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As it is an elliptic partial differential equation, solving the Poisson
equation usually involves implicit solvers which are computationally
much more expensive than the solution of the reaction-diffusion equation
in the first step, Eq. &lt;a class="link" href="#eq:bidomain" &gt;12&lt;/a&gt; A.&lt;/p&gt;
&lt;div id="sec:monodomain"&gt;
&lt;h2 id="monodomain-descriptiona-reaction-diffusion-system"&gt;Monodomain description&amp;mdash;a reaction-diffusion system
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Another assumption can be made to get to a simpler description of the
activation patterns. Assume that the anisotropy of the conduction on the
interior and exterior is the same, i.e., let the conductivities be
proportional to each other,
${{\bm{{\sigma}}}}_\text{e} := \lambda {{\bm{{\sigma}}}}_\text{i}$
for a dimensionless constant $\lambda &gt; 0$ (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton
et al., 2011&lt;/a&gt;). From Eq. &lt;a class="link" href="#eq:bidomain" &gt;12&lt;/a&gt;, we
then obtain: &lt;span &gt;$$
\begin{aligned}
&amp;\nabla\cdot{{\bm{{\sigma}}}}_\text{i} \nabla u
=
-\nabla\cdot[{{\bm{{\sigma}}}}_\text{i} + \lambda {{\bm{{\sigma}}}}_\text{i}] \nabla u_\text{e}
=
-[1 + \lambda]\nabla\cdot{{\bm{{\sigma}}}}_\text{i} \nabla u_\text{e}
\\
\Rightarrow
&amp;C\partial_t u
=
\nabla\cdot{{\bm{{\sigma}}}}_\text{i}\nabla u
+ \nabla\cdot{{\bm{{\sigma}}}}_\text{i}\nabla u_\text{e}
- I_\text{ion}
=
\nabla\cdot{{\bm{{\sigma}}}}_\text{i}\nabla u
- \frac{1}{1+\lambda} \nabla\cdot{{\bm{{\sigma}}}}_\text{i} \nabla u
- I_\text{ion}
\\
\Rightarrow
&amp;\partial_t u
=
\frac{1}{C}
\frac{\lambda}{1+\lambda}
\nabla\cdot{{\bm{{\sigma}}}}_\text{i} \nabla u
- \frac{I_\text{ion}}{C}
\end{aligned}
\qquad{(17)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;From this, the main monodomain equation follows:
&lt;span id="eq:monodomain:pre"&gt;$$
\partial_t u
=
\nabla\cdot{{\bm{{D}}}} \nabla u
- \frac{I_\text{ion}}{C}
\qquad{(18)}$$&lt;/span&gt; where we have defined
the diffusivity tensor
&lt;span id="eq:diffusivity"&gt;$$
{{\bm{{D}}}}
:=
\frac{1}{C}
\frac{\lambda}{1+\lambda} {{\bm{{\sigma}}}}_\text{i}
\qquad{(19)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The full monodomain description can be obtained by taking the other
quantities that influence the ionic currents
$I_\text{ion}$ into account. These quantities
describe the state of the cells, for instance via ion concentrations and
gating variables. These variables are collected in the state variable
vector ${{\underline{{u}}}} (t, {{\bm{{x}}}})$ whose
first component usually is the transmembrane voltage
$u$. Let
${{\underline{{r}}}} ({{\underline{{u}}}})$ be the
reaction term whose first component is
$r({{\underline{{u}}}}) = - I_\text{ion}/C$ in
${\mathrm{{V}{/}{s}}}$. We can then rewrite
Eq. &lt;a class="link" href="#eq:monodomain:pre" &gt;18&lt;/a&gt; as the reaction-diffusion equation:
&lt;span id="eq:monodomain"&gt;$$
\partial_t {{\underline{{u}}}}
=
{{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}
+
{{\underline{{r}}}} ({{\underline{{u}}}})
\qquad{(20)}$$&lt;/span&gt; where the unitless
projection matrix ${{\underline{{P}}}}$ encodes
whether a variable is to be subjected to the diffusion operator. For
most cell models, only the transmembrane voltage is diffused,
${{\underline{{P}}}} = \operatorname{diag}(1, 0, ...,
0)$.&lt;/p&gt;
&lt;p&gt;A side note on notation: We use different notation to distinguish
vectors and matrices in physical space and state space. Capital letters
are used for matrices, ${{\bm{{D}}}}$,
${{\underline{{P}}}}$; while lowercase letters are
used for vectors, ${{\bm{{x}}}}$,
${{\underline{{u}}}}$. Boldface symbols are vectors
or matrices in physical space, ${{\bm{{x}}}}$,
${{\bm{{D}}}}$; while underlined quantities are
vectors or matrices with respect to the state variables,
${{\underline{{u}}}}$,
${{\underline{{P}}}}$. To illustrate this notation,
Eq. &lt;a class="link" href="#eq:monodomain" &gt;20&lt;/a&gt; would read as follows in Einstein sum notation
(&lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus, Cloet, et al., 2024&lt;/a&gt;):
&lt;span id="eq:monodomain:einstein"&gt;$$
\partial_t u_m(t,{{\bm{{x}}}})
=
P_{mm'} \;
\partial_{n}
D_{nn'}({{\bm{{x}}}}) \;
\partial_{n'}
u_{m'}(t, {{\bm{{x}}}})
+
r_{m}({{\underline{{u}}}};{{\bm{{x}}}})
\qquad{(21)}$$&lt;/span&gt; where
$m, m' \in \{1, ..., M\}$ for $M$
state variables and $n, n' \in \{1, 2,
3\}$ the spatial dimensions with
$\partial_n = \partial_{x_n}$.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;With no-flux boundary and initial conditions, the full &lt;em&gt;monodomain
description&lt;/em&gt; takes the form of this system of partial differential
equations: &lt;span id="eq:rd"&gt;$$
\begin{aligned}
\partial_t {{\underline{{u}}}}
&amp;=
{{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}
+
{{\underline{{r}}}} ({{\underline{{u}}}})
&amp; \text{on}\,\heartsuit\times[0,T]
&amp; \;\;\;\text{(A)}
\\
0
&amp;=
{{\bm{{n}}}} \cdot
\nabla {{\underline{{u}}}}
&amp; \text{on}\,\partial\heartsuit\times[0,T]
&amp; \;\;\;\text{(B)}
\\
{{\underline{{u}}}}
&amp;=
{{\underline{{u}}}}_\text{init}
&amp; \text{on}\,\heartsuit\times\{0\}
&amp; \;\;\;\text{(C)}
\end{aligned}
\qquad{(22)}$$&lt;/span&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;In a more general context, the monodomain equations are an example of a
reaction-diffusion system, which can be used to describe a wide variety
of phenomomena. All kinds of excitation waves can be modelled as
reaction-diffusion systems, which, besides muscle tissue and other
tissues in the body like coupled neurons (&lt;a class="link" href="#ref-cannon2014neurosystems" &gt;Cannon et al.,
2014&lt;/a&gt;), includes waves in chemistry
(&lt;a class="link" href="#ref-kapral1995chemical" &gt;Kapral &amp;amp; Showalter, 1995&lt;/a&gt;; &lt;a class="link" href="#ref-rotermund1990imaging" &gt;Rotermund et al.,
1990&lt;/a&gt;), or, more abstractly, the spread of
epidemics (&lt;a class="link" href="#ref-arno2024feynman" &gt;Arno et al., 2024a&lt;/a&gt;; &lt;a class="link" href="#ref-lechleiter1991spiral" &gt;Lechleiter et
al., 1991&lt;/a&gt;). Even the propagation of a
mexican wave in a sports stadium, or the spread of forest fires with
subsequent recovery (Fig. &lt;a class="link" href="#fig:fire" &gt;9&lt;/a&gt;) can be seen as excitable
media.&lt;/p&gt;
&lt;div id="fig:fire"&gt;
&lt;p&gt;&lt;img alt="Forest fires as an excitable system" class="gallery-image" data-flex-basis="604px" data-flex-grow="252" height="800" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/fire.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/fire_hu_147f6191f5f1dd7e.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/fire_hu_23f22fba9918b620.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/fire.png 2016w" width="2016"&gt;&lt;/p&gt;
&lt;p&gt;Figure 9: &lt;strong&gt;Forest fires as an excitable system&lt;/strong&gt; can also be modelled
by the reaction-diffusion equations (Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;). In the depicted
non-scientific simulation, the spread of a forest fire is modelled on a
planet in the shape of a human heart to illustrate the similarities
between the two phenomena of wildfire spread and cardiac electrical
excitation waves. CC-BY 2022 Judith Verdonck, Desmond Kabus et al.;
&lt;a class="link" href="https://heartkor.gitlab.io/" target="_blank" rel="noopener"
 &gt;Team HeartKOR&lt;/a&gt; at &lt;a class="link" href="https://www.kuleuven.be/" target="_blank" rel="noopener"
 &gt;KU
Leuven&lt;/a&gt; and &lt;a class="link" href="https://www.digitalartsandentertainment.be/" target="_blank" rel="noopener"
 &gt;Digital Arts and
Entertainment&lt;/a&gt; at
&lt;a class="link" href="https://www.howest.be/" target="_blank" rel="noopener"
 &gt;Howest&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:rd:numerical"&gt;&lt;/p&gt;
&lt;h2 id="numerical-solvers-of-reaction-diffusion-problems"&gt;Numerical solvers of reaction-diffusion problems
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;To solve the monodomain equations (Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;) numerically, in
contrast to the bidomain equations, one now does not need to solve
Poisson&amp;rsquo;s equation. A forward Euler scheme for this is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Calculate the diffusion term: &lt;span &gt;$$
 {{\underline{{d}}}} = {{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}
 \qquad{(23)}$$&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update ${{\underline{{u}}}}$ based on
Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt; A:
&lt;span id="eq:euler:forward"&gt;$$
 {{\underline{{u}}}} \leftarrow {{\underline{{u}}}} + \Delta t [{{\underline{{d}}}} + {{\underline{{r}}}}]
 \qquad{(24)}$$&lt;/span&gt; respecting the
no-flux boundary condition Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt; B.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;While this simpler numerical scheme is an advantage of the monodomain
over the bidomain description, the monodomain description has the
disadvantage that it is at a higher level of abstraction from the
physical reality. Some level of detail necessarily gets lost during
abstraction. For instance, one can not exactly recover the intra- and
extra-cellular potentials, $u_\text{i}$ and
$u_\text{e}$, from the transmembrane voltage
$u$.&lt;/p&gt;
&lt;p&gt;A variety of finite-differences or -elements software has been published
to solve Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;, some of which also have support for solving
the bidomain description, Eq. &lt;a class="link" href="#eq:bidomain" &gt;12&lt;/a&gt;, (&lt;a class="link" href="#ref-lifexep" &gt;Africa et al.,
2023&lt;/a&gt;; &lt;a class="link" href="#ref-beatbox" &gt;Antonioletti et al., 2017&lt;/a&gt;; &lt;a class="link" href="#ref-gems" &gt;Arens
et al., 2018&lt;/a&gt;; &lt;a class="link" href="#ref-ceps" &gt;CARMEN, 2024&lt;/a&gt;; &lt;a class="link" href="#ref-chaste" &gt;Cooper et al.,
2020&lt;/a&gt;; &lt;a class="link" href="#ref-simcardems" &gt;Finsberg et al., 2023&lt;/a&gt;; &lt;a class="link" href="#ref-niederer2011verification" &gt;Niederer
et al., 2011&lt;/a&gt;; &lt;a class="link" href="#ref-opencarp" &gt;Plank et al.,
2021&lt;/a&gt;; &lt;a class="link" href="#ref-cbcbeat" &gt;Rognes et al., 2017&lt;/a&gt;). To have
control of every aspect of the numerical solution, we have also
developed our own reaction-diffusion solvers. By designing every
component that goes into the software ourselves, we can optimise the
code perfectly for our use cases, such as including tools geared towards
cardiac electrophysiology and omitting features that are irrelevant to
us. Additionally, we can tweak the code to ideally match available
hardware.&lt;/p&gt;
&lt;p&gt;The first of our reaction-diffusion solvers is Ithildin (&lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus, Cloet,
et al., 2024&lt;/a&gt;): It was written in the C++
programming language (&lt;a class="link" href="#ref-cpp23" &gt;ISO, 2023&lt;/a&gt;) and utilises
parallelisation with OpenMPI (&lt;a class="link" href="#ref-openmpi" &gt;Graham et al., 2006&lt;/a&gt;), an
open implementation of the &lt;em&gt;message passing interface&lt;/em&gt; (MPI), for
efficient simulations in 2D and 3D on &lt;em&gt;central processing units&lt;/em&gt; (CPUs).
It also offers a wide variety of methods for recording additional data
during the simulation, such as pseudo-EGMs. Beginning with work by C.
Zemlin and O. Bernus and continued development by H. Dierckx from 2009
onwards, in this PhD project, this code was polished, thoroughly
improving its code in regards to the numerical methods and
user-friendliness. Ithildin was published as a scientific research paper
for this PhD project which is reproduced in
&lt;a class="link" href="https://kabus.eu/2024/09/19/kabus2024ithildin/" &gt;chapter 2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A more minimal alternative is the Python-integrated GPU-enabled reaction
diffusion solver, or in short Pigreads, which we wrote to be published
along with this dissertation. Instead of on CPUs, Pigreads solves the
reaction-diffusion equation on &lt;em&gt;graphical processing units&lt;/em&gt; (GPUs).
While GPUs are, as the name implies, designed for calculations related
to computer graphics&amp;mdash;such as rendering 3D objects, shaders, or image
processing, all of their computational power is opened up in
&lt;em&gt;general-purpose computing on GPUs&lt;/em&gt; (GPGPU). This paradigm is
particularly useful for highly-parallel numerical problems, for
instance, where at each of a large number of points, the same equations
need to be solved independently from one another. While there are
multiple solutions to utilise GPGPU capabilities, for Pigreads, we use
the &lt;em&gt;Open Computing Language&lt;/em&gt; (OpenCL) (&lt;a class="link" href="#ref-opencl" &gt;Stone et al.,
2010&lt;/a&gt;) to enable cross-platform GPU-parallelisation. For
instance, on Nvidia GPUs, OpenCL capabilities are provided by the
proprietary but highly-optimised &lt;em&gt;Compute Unified Device Architecture&lt;/em&gt;
(CUDA) (&lt;a class="link" href="#ref-du2012cuda" &gt;Du et al., 2012&lt;/a&gt;; &lt;a class="link" href="#ref-cuda" &gt;Nickolls et al.,
2008&lt;/a&gt;). Similar implementations exist for other GPU
architectures; there even is a CPU fallback making it possible to run
Pigreads on machines without a dedicated GPU. Pigreads is designed to
have as little overhead as possible, only solving the reaction-diffusion
equations (Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;), without any bells and whistles for maximal
performance. Instead, it is relying on a simple interface with the
Python programming language via Pybind11 (&lt;a class="link" href="#ref-pybind11" &gt;Jakob et al.,
2017&lt;/a&gt;; &lt;a class="link" href="#ref-python" &gt;van Rossum et al., 1995&lt;/a&gt;). This way,
any desired custom feature can easily be implemented in a Python script
with numerical and scientific Python (&lt;a class="link" href="#ref-numpy" &gt;Harris et al., 2020&lt;/a&gt;;
&lt;a class="link" href="#ref-scipy" &gt;Virtanen et al., 2020&lt;/a&gt;) which then calls the Pigreads
module.&lt;/p&gt;
&lt;p&gt;Both of our solvers, Ithildin and Pigreads, use central finite
differences to implement the spatial derivatives in Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;,
such as the diffusion term $\nabla \cdot
{{\bm{{D}}}} \nabla u$. In the finite differences method,
derivatives are approximated by calculating a weighted sum in a
neighbourhood around each point on a grid&amp;mdash;the discretisation of the
domain $\heartsuit$. For instance, the
one-dimensional Laplacian $\partial_x^2 u$ can be
calculated as: &lt;span &gt;$$
\partial^2_x u(x) \approx \frac{u(x + \Delta x) - 2 u(x) + u(x - \Delta x)}{\Delta x^2}
\qquad{(25)}$$&lt;/span&gt; which is an
approximation that is accurate to the second order of the grid spacing
$\Delta x &gt; 0$. The weights in this case are
$\frac{1}{\Delta x^2}$ for the previous and following
grid point, and $\frac{-2}{\Delta x^2}$ for the grid
point $x$ to calculate the Laplacian at. Note that
these weights need to be adjusted if any of the neighbouring points are
outside of the domain. Finite-difference weights numerically
discretising the diffusion term $\nabla
\cdot {{\bm{{D}}}} \nabla u$ and respecting the no-flux
boundary conditions (Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;) also depend on the varying value
of ${{\bm{{D}}}}({{\bm{{x}}}})$ over space. The
diffusion matrix ${{\bm{{D}}}}$ is usually left
constant in time though, such that the weights must be calculated only
once at the beginning of the numerical simulation (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;A final issue to address in the design of finite differences solvers of
Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt; using an forward Euler time stepping scheme is the
Courant-Friedrichs-Lewy (CFL) numerical stability criterion (&lt;a class="link" href="#ref-courant1928cfl" &gt;Courant et
al., 1928&lt;/a&gt;): If the time step
$\Delta t$ is too large, critical details of the wave
propagation in the reaction-diffusion equation might be neglegted
leading to an inaccurate or even unstable solution, i.e.,
$u \rightarrow \infty$. The CFL condition ensures
that $\Delta t$ is small enough such that the waves
do not travel further than one spatial grid point during each time step.
Ithildin automatically sets the time step low enough to satisfy the
criterion as follows (&lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus, Cloet, et al.,
2024&lt;/a&gt;; &lt;a class="link" href="#ref-li1994convergence" &gt;Li et al.,
1994&lt;/a&gt;):
&lt;span id="eq:cfl"&gt;$$
\Delta t
&lt;
{{\left[ 2\max{({{\underline{{P}}}})} \sum_{n=1}^{N} \frac{D_{nn}}{\Delta x_n^2} \right]}}^{-1}
\qquad{(26)}$$&lt;/span&gt; Therefore, the
maximum time step is linked to the chosen grid spacing.&lt;/p&gt;
&lt;div id="sec:rd:solutions"&gt;
&lt;h2 id="common-solutions-of-reaction-diffusion-problems"&gt;Common solutions of reaction-diffusion problems
&lt;/h2&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="the-heat-equation"&gt;&lt;/p&gt;
&lt;h3 id="the-heat-equation"&gt;The heat equation
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The two terms on the right-hand side of Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt; A, encode the
two mechanisms enabling the propagation of excitation waves. The
diffusion term
${{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}$
spatially couples the medium and leads to the spreading of
${{\underline{{u}}}}$. Considering only the diffusion
term, i.e., for the trivial model
${{\underline{{r}}}} = 0$, Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt; is
reduced to the heat equation:
&lt;span id="eq:heat"&gt;$$
\begin{aligned}
\partial_t u
&amp;=
\nabla \cdot {{\bm{{D}}}} \nabla u
&amp; \text{on}\,\heartsuit\times[0,T]
&amp; \;\;\;\text{(A)}
\\
0
&amp;=
{{\bm{{n}}}} \cdot
\nabla u
&amp; \text{on}\,\partial\heartsuit\times[0,T]
&amp; \;\;\;\text{(B)}
\\
u
&amp;=
u_\text{init}
&amp; \text{on}\,\heartsuit\times\{0\}
&amp; \;\;\;\text{(C)}
\end{aligned}
\qquad{(27)}$$&lt;/span&gt; An example of a
typical solution $u(t, {{\bm{{x}}}})$ of the heat
equation is obtained via numerical simulation using Pigreads and shown
in Fig. &lt;a class="link" href="#fig:heat" &gt;10&lt;/a&gt;: The sharp right angles of the square-shaped
heat distribution $u_\text{init}(x)$ at
$t=0$, gradually get smoothed out such that the
temperature will eventually equalise in the entire domain for
$t\to\infty$. These equations also describe how
initially uneven concentrations of chemicals eventually reach a
homogeneous steady-state through diffusion, which is why
Eq. &lt;a class="link" href="#eq:heat" &gt;27&lt;/a&gt; A is sometimes also called the diffusion equation.
This is also the origin of the names of the diffusion term, diffusion
operator, etc.&lt;/p&gt;
&lt;div id="fig:heat"&gt;
&lt;p&gt;&lt;img alt="A solution of the heat equation" class="gallery-image" data-flex-basis="300px" data-flex-grow="125" height="1440" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/heat.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/heat_hu_82d566b9bc05fe14.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/heat_hu_e0281c3b6d2548df.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/heat.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 10: &lt;strong&gt;A solution of the heat equation.&lt;/strong&gt; The heat equation
(Eq. &lt;a class="link" href="#eq:heat" &gt;27&lt;/a&gt;) describes that an initially uneven distribution of
heat gets diffused until a steady-state of homogeneous temperature is
reached.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="the-model-by-gray1983autocatalytic"&gt;&lt;/p&gt;
&lt;h3 id="the-model-by-p-gray--scott-1983"&gt;The model by P. Gray &amp;amp; Scott (&lt;a class="link" href="#ref-gray1983autocatalytic" &gt;1983&lt;/a&gt;)
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The reaction term ${{\underline{{r}}}}$ describes the
local reaction at each point of the medium
$\heartsuit$. Let there be two variables,
${{\underline{{u}}}} = {{{{\left[ a, b \right]}}}^\mathrm{T}}$,
scaled to the interval $[0,1]$, which each describe
the concentrations of one of two chemicals $A$ and
$B$. One of the models by P. Gray &amp;amp; Scott
(&lt;a class="link" href="#ref-gray1983autocatalytic" &gt;1983&lt;/a&gt;) describes the chemical reactions:
&lt;span id="eq:gray:reactions"&gt;$$
\begin{aligned}
A + 2B &amp;\to 3B
&amp; \;\;\;\text{(A)}
\\
B &amp;\to C
&amp; \;\;\;\text{(B)}
\end{aligned}
\qquad{(28)}$$&lt;/span&gt; for the product
$C$. Reactant $A$ is fed into the
system at rate $f$, a model parameter; and the
parameter $k$ determines how quickly reactant
$B$ is removed. $A$ takes the role
of an activator whose presence increases the reaction rate, while
$B$ inhibits, i.e., slows down the reaction. The
model equations then take the form:
&lt;span id="eq:gray"&gt;$$
\begin{aligned}
\partial_t a &amp;= D_a \nabla^2 a - a b^2 + f [1 - a]
&amp; \;\;\;\text{(A)}
\\
\partial_t b &amp;= D_b \nabla^2 b + a b^2 - [f + k] b
&amp; \;\;\;\text{(B)}
\end{aligned}
\qquad{(29)}$$&lt;/span&gt; with diffusivities
$D_a = 1$ and $D_b = 0.5$. For
various parameters $k$ and $f$,
the solutions of Eq. &lt;a class="link" href="#eq:gray" &gt;29&lt;/a&gt; are leopard-like dotted patterns or
zebra-like line patterns, or even spiral waves. For example,
Fig. &lt;a class="link" href="#fig:gray" &gt;11&lt;/a&gt; illustrates a Pigreads simulation of the model with
$k = 0.062$ and $f = 0.055$
starting at a triangular initial distribution of $B$
and constant maximal concentration $a=1$ of reactant
$A$. We used a grid spacing of
$\Delta x = \Delta y = 1$ and a time step of
$\Delta t = 0.1$ in arbitrary spatial and temporal
units.&lt;/p&gt;
&lt;div id="fig:gray"&gt;
&lt;p&gt;&lt;img alt="A solution of the model by P. Gray &amp; Scott (1983)" class="gallery-image" data-flex-basis="214px" data-flex-grow="89" height="2010" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/gray.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/gray_hu_a31c9e80cb7ae593.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/gray_hu_934856d3bc225600.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/gray.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 11: &lt;strong&gt;A solution of the model by P. Gray &amp;amp; Scott
(&lt;a class="link" href="#ref-gray1983autocatalytic" &gt;1983&lt;/a&gt;).&lt;/strong&gt; Starting from a simple initial
condition in chemical $B$, a complex shape develops
for parameters $k = 0.062$ and
$f = 0.055$, cf. Eq. &lt;a class="link" href="#eq:gray" &gt;29&lt;/a&gt;. Arbitrary units
in time and space are used, the concentrations $a$
and $b$ are scaled to [0,1].&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;This example illustrates how the interplay of diffusion and reaction can
lead to complex and chaotic behaviour: Slight variations in initial
conditions can lead to vastly different outcomes.&lt;/p&gt;
&lt;div id="sec:models:phenomenological"&gt;
&lt;h3 id="excitation-waves-in-cardiac-muscle-tissue"&gt;Excitation waves in cardiac muscle tissue
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Nowadays, there is a large variety of electrophysiological models that
describe the excitation waves that can be found in various cells. One of
the first and most influential was the model of the giant squid axon by
Hodgkin &amp;amp; Huxley (&lt;a class="link" href="#ref-hodgkin1952quantitative" &gt;1952&lt;/a&gt;), describing the
neurons as an electrical circuit, as described in
section &lt;a class="link" href="#sec:bidomain" &gt;2.1&lt;/a&gt;, gaining them the 1963 Nobel Prize in
Physiology or Medicine (&lt;a class="link" href="#ref-nobelprize1963medicine" &gt;Nobel Prize,
1963&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Most models fit into two categories: phenomenological and detailed ionic
models. The detailed models (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;Courtemanche et al.,
1998&lt;/a&gt;; &lt;a class="link" href="#ref-majumder2016model" &gt;Majumder et al.,
2016&lt;/a&gt;; &lt;a class="link" href="#ref-paci2013model" &gt;Paci et al., 2013&lt;/a&gt;;
&lt;a class="link" href="#ref-ten2006alternans" &gt;ten Tusscher &amp;amp; Panfilov, 2006&lt;/a&gt;) aim to describe
as many electrophysiological processes inside each cell as possible to
provide a full description of their behaviour starting on the single
cell level, zooming out to the tissue level. The goal of the
phenomenological models is to describe the overall wave dynamics on the
tissue level while simplifying microscopic details within the cells.
This reduces their computational cost, such that larger scale
simulations are possible than with more detailed models. The model by
FitzHugh (&lt;a class="link" href="#ref-fitzhugh1961impulses" &gt;1961&lt;/a&gt;) and Nagumo et al.
(&lt;a class="link" href="#ref-nagumo1962active" &gt;1962&lt;/a&gt;) can be seen as a two-variable
simplification of the four-variable Hodgkin &amp;amp; Huxley
(&lt;a class="link" href="#ref-hodgkin1952quantitative" &gt;1952&lt;/a&gt;) model. The model by Barkley
(&lt;a class="link" href="#ref-barkley1991model" &gt;1991&lt;/a&gt;) follows similar design goals, however it
was specifically designed to simulate the spiral waves arising in the
Belousov-Zhabotinsky reaction. Other early phenomenological models
specifically designed for cardiac excitation patterns are the models by
Karma (&lt;a class="link" href="#ref-karma1993spiral" &gt;1993&lt;/a&gt;); Aliev &amp;amp; Panfilov
(&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;), Fenton &amp;amp; Karma
(&lt;a class="link" href="#ref-fenton1998vortex" &gt;1998&lt;/a&gt;), and C. Mitchell
(&lt;a class="link" href="#ref-mitchellschaeffer2003model" &gt;2003&lt;/a&gt;). The minimal four-variable
model by Bueno-Orovio et al. (&lt;a class="link" href="#ref-bueno2008model" &gt;2008&lt;/a&gt;) can be used
to emulate other models, such as the ones by ten Tusscher et al.
(&lt;a class="link" href="#ref-tentusscher2004model" &gt;2004&lt;/a&gt;) or Priebe &amp;amp; Beuckelmann
(&lt;a class="link" href="#ref-priebe1998simulation" &gt;1998&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Using the smoothed version of the Karma model (&lt;a class="link" href="#ref-byrne2015exact" &gt;Byrne et al.,
2015&lt;/a&gt;; &lt;a class="link" href="#ref-karma1993spiral" &gt;Karma, 1993&lt;/a&gt;,
&lt;a class="link" href="#ref-karma1994electrical" &gt;1994&lt;/a&gt;; &lt;a class="link" href="#ref-marcotte2017dynamical" &gt;Marcotte &amp;amp; Grigoriev,
2017&lt;/a&gt;), we have run a Pigreads simulation on
a monolayer, i.e., two-dimensional tissue, approximately in 6-well size
($R = {11~\mathrm{{m}{m}}}$) at a resolution of
200x200 pixels, with homogeneous and isotropic diffusivity $D =
{0.03~\mathrm{{mm}^2{/}{m}{s}}}$, with selection matrix
$P_u =
1$ and $P_v = 0.05$ for the state variables
${{\underline{{u}}}} = {{{{\left[ u, v \right]}}}^\mathrm{T}}$,
using a time step of $\Delta t = 0.025$. In this
simulation in Fig. &lt;a class="link" href="#fig:marcotte" &gt;12&lt;/a&gt;, some of the typical
electrophysiological behaviour of cardiac myocytes can be observed: The
state variable $u$ which represents the transmembrane
voltage in arbitrary units, smoothly switches between excited and
resting state in waves of excitation that propagate through the medium.
The depolarisation at the wave front, the up-stroke, occurs on a quicker
time-scale than the repolarisation at the wave back. Between excitation
and recovery, the transmembrane voltage stays roughly constant in the
so-called plateau phase. This cycle from polarised resting state, over
upstroke, plateau, and recovery, back to the resting state is called an
action potential. The restitution variable $v$
describes the internal state of the cells, most crucially how recently
the waves have been excited. At a high value of this variable
$v$, excitation is inhibited, as can be seen at
$t={0~\mathrm{{m}{s}}}$ in Fig. &lt;a class="link" href="#fig:marcotte" &gt;12&lt;/a&gt;
A.&lt;/p&gt;
&lt;div id="fig:marcotte"&gt;
&lt;p&gt;&lt;img alt="Simulation of the smoothed Karma model" class="gallery-image" data-flex-basis="261px" data-flex-grow="109" height="1650" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte_hu_d1da14ae7eb1b1e4.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte_hu_b3f1e44b0acefbdc.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 12: &lt;strong&gt;Simulation of the smoothed Karma model&lt;/strong&gt; in a 6-well
monolayer. Due to the initial distribution of the restitution variable,
a rotor forms.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In this simulation (Fig. &lt;a class="link" href="#fig:marcotte" &gt;12&lt;/a&gt;), we have chosen initial
conditions such that a rotor forms: Due to the high value of
$v=1$ in the lower half of the monolayer at
$t={0~\mathrm{{m}{s}}}$, the initial stimulus in
$u$ only triggers an action potential in the upper
half, a conduction block line between the halves forms. Once the tissue
recovers, it is again possible to excite the lower half. The wave turns
around and follows the conduction block line creating a spiral wave
rotor. These re-entrant waves have been identified as one of the
mechanisms of tachycardia (&lt;a class="link" href="#ref-gray1995nonstationary" &gt;R. A. Gray et al.,
1995&lt;/a&gt;).&lt;/p&gt;
&lt;div id="sec:inhom"&gt;
&lt;h2 id="influence-of-tissue-heterogeneity-and-anisotropy-on-electrical-excitation-waves-in-the-heart"&gt;Influence of tissue heterogeneity and anisotropy on electrical excitation waves in the heart
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;An anisotropic diffusivity tensor ${{\bm{{D}}}}$,
i.e., one that is not the same in every direction, encodes at which time
scale diffusion&amp;mdash;and equivalently conduction&amp;mdash;takes place in the
different directions. Cardiac muscle tissue is structured in fibres that
may be further aligned in sheets. The diffusion along the fibres,
encoded in diffusivity $D_{\text{f}}$, and within the
sheets, $D_{\text{s}}$, is faster than in the normal
direction, $D_{\text{n}}$ (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;): &lt;span &gt;$$
{{\bm{{D}}}}
=
D_{\text{f}} {{\bm{{e}}}}_{\text{f}} {{{{\bm{{e}}}}}^\mathrm{T}}_{\text{f}}
+
D_{\text{s}} {{\bm{{e}}}}_{\text{s}} {{{{\bm{{e}}}}}^\mathrm{T}}_{\text{s}}
+
D_{\text{n}} {{\bm{{e}}}}_{\text{n}} {{{{\bm{{e}}}}}^\mathrm{T}}_{\text{n}}
\qquad{(30)}$$&lt;/span&gt; for the orthonormal
basis vectors ${{\bm{{e}}}}_\text{f,s,n}$ along the
fibres, within the sheet, and normal to the sheets, and
${{\bm{{a}}}} {{{{\bm{{b}}}}}^\mathrm{T}}$ denotes
the outer product of the column vectors
${{\bm{{a}}}}$ and ${{\bm{{b}}}}$.
Note that additionally the diffusivity
${{\bm{{D}}}}({{\bm{{x}}}})$ and the reaction term
${{\underline{{r}}}}({{\bm{{x}}}}; {{\underline{{u}}}})$
in Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt; may depend on location, encoding spatial
inhomogeneities.&lt;/p&gt;
&lt;p&gt;An example of the fibre direction influencing the wave propagation can
be seen in another Pigreads simulation of the Karma model in
Fig. &lt;a class="link" href="#fig:marcotte:aniso" &gt;13&lt;/a&gt;. All parameters were left the same as in
Fig. &lt;a class="link" href="#fig:marcotte" &gt;12&lt;/a&gt;, except the diffusivity tensor
${{\bm{{D}}}}$: For a diffusivity along the fibres
$D_{\text{f}} =
{0.03~\mathrm{{mm}^2{/}{m}{s}}}$ and in the normal
direction in the sheet
$D_{\text{s}} = \frac{1}{5} D_{\text{f}}$, we
consider fibres whose direction vary at a constant rate along the
horizontal axis, as can be seen Fig. &lt;a class="link" href="#fig:marcotte:aniso" &gt;13&lt;/a&gt; A.
Particularly comparing panels D of Fig. &lt;a class="link" href="#fig:marcotte" &gt;12&lt;/a&gt; and
Fig. &lt;a class="link" href="#fig:marcotte:aniso" &gt;13&lt;/a&gt;, it can be seen how the slower conduction
normal to the fibres has changed the shape of the wave front.&lt;/p&gt;
&lt;div id="fig:marcotte:aniso"&gt;
&lt;p&gt;&lt;img alt="Simulation showing the influence of fibre direction" class="gallery-image" data-flex-basis="261px" data-flex-grow="109" height="1650" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.aniso.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.aniso_hu_1f407467cc0edd75.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.aniso_hu_2f805367d60a2b72.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.aniso.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 13: &lt;strong&gt;Simulation showing the influence of fibre direction&lt;/strong&gt; on
the wave propagation in a 6-well monolayer of the Karma model.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;One way to numerically model fibrosis, i.e., regions of cells that can
not be excited (&lt;a class="link" href="#ref-kazbanov2016effects" &gt;Kazbanov et al., 2016&lt;/a&gt;), is
to treat vertices in the finite-differences grid as exterior points.
This was randomly done to of the vertices in the Pigreads simulation
shown in Fig. &lt;a class="link" href="#fig:marcotte:fibro" &gt;14&lt;/a&gt;. Here, the wave is slightly
disturbed but still shows roughly the same behaviour as in the
unmodified simulation (Fig. &lt;a class="link" href="#fig:marcotte" &gt;12&lt;/a&gt;).&lt;/p&gt;
&lt;div id="fig:marcotte:fibro"&gt;
&lt;p&gt;&lt;img alt="Simulation showing the effect of fibrosis" class="gallery-image" data-flex-basis="261px" data-flex-grow="109" height="1650" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.fibro.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.fibro_hu_50da21605b7f96c8.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.fibro_hu_c2ef434024b822c4.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.fibro.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 14: &lt;strong&gt;Simulation showing the effect of fibrosis&lt;/strong&gt; on the wave
propagation in a 6-well monolayer of the Karma model.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The deterministic dynamics of Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt; are chaotic though, so
small differences grow over time; the solutions diverge (&lt;a class="link" href="#ref-mitchell1985numerical" &gt;A. Mitchell &amp;amp;
Bruch Jr, 1985&lt;/a&gt;). Consider another
simulation where a different subset of of vertices are modelled as
fibrosis. While at first, the two solutions in
Fig. &lt;a class="link" href="#fig:marcotte:fibro" &gt;14&lt;/a&gt; and Fig. &lt;a class="link" href="#fig:marcotte:chaos" &gt;15&lt;/a&gt; evolve
in quite similar ways, the final frames show very different states.&lt;/p&gt;
&lt;div id="fig:marcotte:chaos"&gt;
&lt;p&gt;&lt;img alt="Simulation showing chaotic behaviour" class="gallery-image" data-flex-basis="261px" data-flex-grow="109" height="1650" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.chaos.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.chaos_hu_157eb0d0dc7a938.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.chaos_hu_9c5b7a69476c8e32.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.chaos.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 15: &lt;strong&gt;Simulation showing chaotic behaviour&lt;/strong&gt; in the wave
propagation in a 6-well monolayer of the Karma model. Initially small
differences grow until divergence from Fig. &lt;a class="link" href="#fig:marcotte:fibro" &gt;14&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Different types of cells, the variation between cells of the same type
over space, or diseased cells may be described by changing model
parameters. In the Pigreads simulation in Fig. &lt;a class="link" href="#fig:marcotte:obst" &gt;16&lt;/a&gt;,
we consider an inhomogeneity at the centre of the domain, where the
model parameter $\epsilon$ of the Karma model as
formulated in Marcotte &amp;amp; Grigoriev (&lt;a class="link" href="#ref-marcotte2017dynamical" &gt;2017&lt;/a&gt;)
is increased by . This leads to a quicker recovery in that region, such
that the rotor is sped up. This, in turn, drives the formation of more
rotors across the domain. The break up of this single spiral into
multiple rotors can be interpreted as a model of tachycardia evolving
into fibrillation (section &lt;a class="link" href="#sec:medicine" &gt;1&lt;/a&gt;).&lt;/p&gt;
&lt;div id="fig:marcotte:obst"&gt;
&lt;p&gt;&lt;img alt="Simulation with inhomogeneous restitution parameters" class="gallery-image" data-flex-basis="261px" data-flex-grow="109" height="1650" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.obst.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.obst_hu_6083994a6caa98ec.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.obst_hu_9cdf620bdbced2df.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/marcotte.obst.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 16: &lt;strong&gt;Simulation with inhomogeneous restitution parameters&lt;/strong&gt;
influencing the wave propagation in a 6-well monolayer of the Karma
model.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Another useful inhomogeneity is to use different, but compatible cell
models for different types of cells. For instance, the model by ten
Tusscher &amp;amp; Panfilov (&lt;a class="link" href="#ref-ten2006alternans" &gt;2006&lt;/a&gt;) shows slightly
different behaviour for cells in the ventricular epicardium&amp;mdash;the
outside surface of the ventricles, endocardium&amp;mdash;the inside surface, and
in the middle of the ventricular wall. A sketch-like simulation that
emphasises these slight differences in the excitation along with
pronounced stronger diffusion along fibres in the horizontal axis can be
found in Fig. &lt;a class="link" href="#fig:tentusscher" &gt;17&lt;/a&gt;. Due to the differences between the
epi- and endocardial variants of the model, the symmetry of the wave
front is broken. Models that differ may also have numerically unstable
behaviour at the interfaces between them. As these models differ only
slightly, they are still compatible.&lt;/p&gt;
&lt;div id="fig:tentusscher"&gt;
&lt;p&gt;&lt;img alt="Simulation of a 2D domain representing a cross-section of the ventricular wall" class="gallery-image" data-flex-basis="334px" data-flex-grow="139" height="1290" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/tentusscher.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/tentusscher_hu_ac14db92219585ba.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/tentusscher_hu_f2d5131832ad10a9.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/tentusscher.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 17: &lt;strong&gt;Simulation of a 2D domain representing a cross-section of
the ventricular wall&lt;/strong&gt; with different variants of the model by ten
Tusscher &amp;amp; Panfilov (&lt;a class="link" href="#ref-ten2006alternans" &gt;2006&lt;/a&gt;). It can be seen that
the excitation is different between variants.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:models:ionic"&gt;&lt;/p&gt;
&lt;h2 id="detailed-ionic-models-of-cardiac-electrophysiology"&gt;Detailed, ionic models of cardiac electrophysiology
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Where the phenomenological models
(section &lt;a class="link" href="#sec:models:phenomenological" &gt;2.4.3&lt;/a&gt;) strive for simplicity
and faithfulness at the tissue level, this often comes at the cost of
accuracy at the single cell level. This is in contrast to the design
goals of ionic models (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;Courtemanche et al.,
1998&lt;/a&gt;; &lt;a class="link" href="#ref-majumder2016model" &gt;Majumder et al.,
2016&lt;/a&gt;; &lt;a class="link" href="#ref-paci2013model" &gt;Paci et al., 2013&lt;/a&gt;;
&lt;a class="link" href="#ref-ten2006alternans" &gt;ten Tusscher &amp;amp; Panfilov, 2006&lt;/a&gt;), where it
ideally includes all ionic currents and other mechanisms that effect the
electrophysiological behaviour of cardiac myocytes and other excitable
cells.&lt;/p&gt;
&lt;p&gt;To create such a model, most authors adapt an existing model by
optionally modifying the model equations, such that more mechanisms in
the cells at hand are captured, followed by tweaking the model
parameters with data from a variety of sources: Patch-clamping is
usually used to record current-voltage curves that capture how a current
across the cell membrane is affected by the transmembrane voltage
$u$. Also obtained from patch-clamping,
activation/inactivation curves can provide insight into when and how
quickly the ion channel gates open in a model. Action potential duration
and conduction velocity restitution curves are also used to fit such an
ionic model, which may be obtained from optical mapping. Details on
these methods can be found in section &lt;a class="link" href="#sec:experiments" &gt;1.3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The main ion current $I_\text{ion}(t, {{\bm{{x}}}})$
in the domain ${{\bm{{x}}}}\in\heartsuit$ over time
$t\in[0,T]$ typically consists of a sum of individual
currents similar to the following (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;Courtemanche et al.,
1998&lt;/a&gt;; &lt;a class="link" href="#ref-hodgkin1952quantitative" &gt;Hodgkin &amp;amp; Huxley,
1952&lt;/a&gt;):
&lt;span id="eq:ionic:current:total"&gt;$$
I_\text{ion}
=
I_\text{Na}
+ I_\text{K}
+ I_\text{Ca}
+ ...
\qquad{(31)}$$&lt;/span&gt; plugging into the bi-
or monodomain equations (Eq. &lt;a class="link" href="#eq:bidomain" &gt;12&lt;/a&gt; or
Eq. &lt;a class="link" href="#eq:monodomain" &gt;20&lt;/a&gt;). The currents
$I_\star(t, {{\bm{{x}}}})$ are often defined as the
product of scalar conductances $G_\star$, unit-less
gating variables $g_{\star, a}(t, {{\bm{{x}}}})$, and
the displacement of the transmembrane voltage $u$
from the equilibrium potentials
$u_{\star}(t, {{\bm{{x}}}})$ (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;Courtemanche et al.,
1998&lt;/a&gt;; &lt;a class="link" href="#ref-hodgkin1952quantitative" &gt;Hodgkin &amp;amp; Huxley,
1952&lt;/a&gt;):
&lt;span id="eq:ionic:current"&gt;$$
I_\star
=
G_\star
{{\left[ u - u_{\star} \right]}}
\prod_a g_{\star a}
\qquad{(32)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The equilibrium potential
$u_{\star}(t, {{\bm{{x}}}})$ for an ion species,
e.g. Na&lt;sup&gt;+&lt;/sup&gt;
, K&lt;sup&gt;+&lt;/sup&gt;
, Ca&lt;sup&gt;2+&lt;/sup&gt;
, etc., can
be calculated as (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;Courtemanche et al.,
1998&lt;/a&gt;):
&lt;span id="eq:ionic:nernst"&gt;$$
u_{\star}
=
\frac{R T}{Z F}
\log\frac{{{\left[ \star \right]}}_\text{e}}{{{\left[ \star \right]}}_\text{i}}
\qquad{(33)}$$&lt;/span&gt; with the extra- and
intracellular ion concentrations
${{\left[ \star \right]}}_\text{e, i}(t,
{{\bm{{x}}}})$, the valence $Z$ of the ion,
temperature $T$ in ${\mathrm{K}}$,
the gas constant
$R = {8.3143~\mathrm{{J}{/}{K}{/}{mol}}}$, and Faraday
constant $F = {96486.7~\mathrm{{C}{/}{mol}}}$.&lt;/p&gt;
&lt;p&gt;Ion gates $g_{\star a}(t, {{\bm{{x}}}})$ can be
modelled as (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;Courtemanche et al., 1998&lt;/a&gt;):
&lt;span id="eq:ionic:gate"&gt;$$
\partial_t g_{\star a}
=
\frac{
 g_{\star a \infty}
 -
 g_{\star a}
}{
 \tau_{\star a}
}
\qquad{(34)}$$&lt;/span&gt; with the steady state
$g_{\star a \infty}$ and time scale
$\tau_{\star a}$.&lt;/p&gt;
&lt;p&gt;For gating variables following Eq. &lt;a class="link" href="#eq:ionic:gate" &gt;34&lt;/a&gt;, instead of
using an forward Euler scheme Eq. &lt;a class="link" href="#eq:euler:forward" &gt;24&lt;/a&gt;, one can use
the Rush-Larssen time stepping scheme (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;Courtemanche et al.,
1998&lt;/a&gt;; &lt;a class="link" href="#ref-rush1978practical" &gt;Rush &amp;amp; Larsen,
1978&lt;/a&gt;):
&lt;span id="eq:rush:larssen"&gt;$$
g_{\star a}
\leftarrow
g_{\star a \infty}
+
[
g_{\star a}
-
g_{\star a \infty}
]
{{\mathrm{e}^{-\frac{\Delta t}{\tau_{\star a}}}}}
\qquad{(35)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It is common in the ionic models to, besides the transmembrane voltage
$u$, have gating variables
$g_{\star, a}$ and ion concentrations
${{\left[ \star \right]}}_\text{e, i}$ as state
variables ${{\underline{{u}}}}(t, {{\bm{{x}}}})$. To
keep the number of state variables as low as possible, the other
quantities in Eqs. &lt;a class="link" href="#eq:ionic:current:total" &gt;31&lt;/a&gt;-&lt;a class="link" href="#eq:ionic:gate" &gt;34&lt;/a&gt;
are expressed in terms of ${{\underline{{u}}}}$.&lt;/p&gt;
&lt;p&gt;Ionic models aim to capture the behaviour of a specific type of cell or
cell line. For example, the 21-variable model by Courtemanche et al.
(&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;1998&lt;/a&gt;) is designed for human atrial
myocytes, while the 18-variable atrial model by Paci et al.
(&lt;a class="link" href="#ref-paci2013model" &gt;2013&lt;/a&gt;) describes human induced pluripotent stem
cell derived cardiomyocytes (hiPSC-CMs) in an atrial-like phenotype.
Tissue-level simulations for both of these are presented in
Figs. &lt;a class="link" href="#fig:courtemanche" &gt;18&lt;/a&gt;, &lt;a class="link" href="#fig:paci" &gt;19&lt;/a&gt;. To stimulate a rotor in
these two simulations, an S1S2 protocol was used: When the wave back of
an initial stimulus (S1) is sensed at a sensor location, a second
stimulus is placed, such that the new excitation wave closely follows
the wave back, creating a rotor. A visualisation of this protocol can
also be found in Fig. &lt;a class="link" href="https://kabus.eu/2024/09/19/kabus2024ithildin/#fig:ithildin:s1s2" &gt;2.5&lt;/a&gt;. We here use current-based
stimuli, essentially an additional source term on the right-hand-side of
Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt; A. For the simulation of the model by Paci et al.
(&lt;a class="link" href="#ref-paci2013model" &gt;2013&lt;/a&gt;) in Fig. &lt;a class="link" href="#fig:paci" &gt;19&lt;/a&gt;, we use an
additional stimulus (S0) before the protocol as, due to the restitution
properties, the action potential duration of the first pulse is much
longer than that of the second pulse. In the resulting wave dynamics of
the two models, it can be seen how different two models for different
cell lines behave even when both of them are designed as models for the
same organ, in this case the atria.&lt;/p&gt;
&lt;div id="fig:courtemanche"&gt;
&lt;p&gt;&lt;img alt="Simulation of the model by Courtemanche et al. (1998) in a large culture dish" class="gallery-image" data-flex-basis="389px" data-flex-grow="162" height="1110" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/courtemanche.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/courtemanche_hu_5f47ca69326937bb.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/courtemanche_hu_379690d415ab767.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/courtemanche.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 18: &lt;strong&gt;Simulation of the model by Courtemanche et al.
(&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;1998&lt;/a&gt;) in a large culture dish&lt;/strong&gt;
stimulated twice following an S1S2 protocol. A meandering rotor is
formed by the second stimulus at the wave back.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="fig:paci"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Simulation of the atrial model by Paci et al. (2013) in a 6-well culture dish" class="gallery-image" data-flex-basis="261px" data-flex-grow="109" height="1650" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/paci.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/paci_hu_9b1b9af8131e79df.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/paci_hu_54b2175ad26763ac.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/reaction-diffusion/pigreads/paci.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 19: &lt;strong&gt;Simulation of the atrial model by Paci et al.
(&lt;a class="link" href="#ref-paci2013model" &gt;2013&lt;/a&gt;) in a 6-well culture dish&lt;/strong&gt; stimulated three
times following an S0S1S2 protocol. The well is just big enough to fit
one rotor.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:rd:limitations"&gt;&lt;/p&gt;
&lt;h2 id="limitations-and-alternatives"&gt;Limitations and alternatives
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The in-silico models in the monodomain description presented in this
section are powerful tools for studying the complex wave dynamics in
heart muscle tissue. While here, we have shown simulations mostly on
homogeneous and isotropic 2D discs to model monolayers,
higher-dimensional simulations with anisotropy and heterogeneities can
be performed. By choosing appropriate weights for the spatial
derivatives, it is also possible to support curved surfaces like for
instance the thin atrial wall (&lt;a class="link" href="#ref-davydov2000drift" &gt;Davydov et al.,
2000&lt;/a&gt;; &lt;a class="link" href="#ref-dierckx2013drift" &gt;Dierckx et al.,
2013&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus, Cloet, et al.,
2024&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Newer ionic models capture a lot of detail on the microscopic scale,
while producing realistic electrical activation patterns on the tissue
scale. Using them on the whole-organ scale, would make them a useful
tool in the clinical context for personalised medicine: Procedures could
be tested on a cardiac digital twin of the patient before they are
actually implemented to test their efficacy and their impact on the
patient. However, as the available computational power is usually still
not big enough to tackle such large-scale whole-heart simulations, they
are currently not feasible for patient care. This is mainly due to the
resolution needed in space and time, i.e., $\Delta x$
and $\Delta t$, to accurately resolve the wave front,
cf. Eq. &lt;a class="link" href="#eq:cfl" &gt;26&lt;/a&gt;. Also, the number of variables in detailed
models&amp;mdash;and hence the number of model equations, negatively impacts
computational costs. With a higher number of model parameters, models
also require more quite diverse and extensive measurements. Measuring
every current in a cell line via patch-clamping is typically not
feasible to create a full ionic model, so data from previously published
models are imported that are assumed to also fit well to the cell line
at hand. The variation between individual cells of a cell line is also
often not taken into account. Finally, the currents are often
re-balanced by scaling their conductances $G_\star$
so the action potential shape, and restitution characteristics match
with observations. However, as these conventional ionic models are
designed on the single-cell scale, they model single cells quite well.&lt;/p&gt;
&lt;p&gt;One of the goals of this project was to explore alternatives or
modifications to these conventional in-silico models of cardiac
electrophysiology. High-resolution optical voltage mapping recordings of
electrical activation patterns on the tissue scale
(section &lt;a class="link" href="#sec:ovm" &gt;1.3.2&lt;/a&gt;) hold promise to enable fully-automatic,
data-driven generation of electrophysiological models directly on the
tissue-level. In the research paper presented in
&lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/" &gt;chapter 5&lt;/a&gt;, we explore one such method that
can be used to quickly generate data-driven tissue excitation models
from optical mapping data using a simple low-order polynomial model.&lt;/p&gt;
&lt;p&gt;This method and other alternative models use machine learning techniques
some of which will be presented in section &lt;a class="link" href="#sec:ml" &gt;4&lt;/a&gt;. In
section &lt;a class="link" href="#sec:phase:analysis" &gt;3&lt;/a&gt;, we introduce methods that are useful
to study the excitation patterns that can be observed in-vitro&amp;mdash;in
optical mapping data, as well as in-silico&amp;mdash;the models that have been
introduced in this section. These tools are used in the method presented
in &lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/" &gt;chapter 5&lt;/a&gt;.&lt;/p&gt;
&lt;div id="sec:phase:analysis"&gt;
&lt;h1 id="phase-analysis-of-electrical-activation-patterns"&gt;Phase analysis of electrical activation patterns
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Consider a model
${{\underline{{r}}}}({{\underline{{u}}}})$ in the
single cell context, i.e., Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt; with no spatial coupling
${{\bm{{D}}}} = 0$. Most of the models we consider in
the context of cardiac electrophysiology capture both depolarisation and
repolarisation&amp;mdash;i.e., excitation and recovery. For a deterministic,
continuous model function
${{\underline{{r}}}}({{\underline{{u}}}})$ to
describe this behaviour, it is typically encoded in at least two
variables
${{\underline{{u}}}} = {{{{\left[ u, v \right]}}}^\mathrm{T}}$.
The variables of a model span the so-called state space. In state space,
the model function is a vector field that describes the reaction at each
possible state of the cells.&lt;/p&gt;
&lt;p&gt;Phase analysis is a useful tool to understand the behaviour of a model
by describing its state with a simple clock-like periodic variable&amp;mdash;a
so-called phase or phase angle ${\varphi}$. This
section will introduce the main concepts of phase, phase singularities,
phase defects, and their relation to conduction blocks. Phase defects
are the main topic of two more scientific articles included in this
dissertation, Kabus et al. (&lt;a class="link" href="#ref-kabus2022numerical" &gt;2022&lt;/a&gt;) in
&lt;a class="link" href="https://kabus.eu/2022/07/12/kabus2022numerical/" &gt;chapter 3&lt;/a&gt; and Arno et al.
(&lt;a class="link" href="#ref-arno2024feynman" &gt;2024a&lt;/a&gt;) in
&lt;a class="link" href="https://kabus.eu/2024/11/22/arno2024feynman/" &gt;chapter 4&lt;/a&gt;.&lt;/p&gt;
&lt;div id="sec:phase"&gt;
&lt;h2 id="state-space-and-phase"&gt;State space and phase
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;As an example, consider the reaction term
${{\underline{{r}}}}({{\underline{{u}}}}) = {{{{\left[ r_u, r_v \right]}}}^\mathrm{T}}$
of the simple two-variable model by Aliev &amp;amp; Panfilov
(&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;):
&lt;span id="eq:aliev1996simple"&gt;$$
\begin{aligned}
r_u &amp;= - k u {{\left[ u - a \right]}} {{\left[ u - 1 \right]}} - u v
&amp; \;\;\;\text{(A)}
\\
r_v &amp;= - \epsilon v - \epsilon k u {{\left[ u - a - 1 \right]}}
&amp; \;\;\;\text{(B)}
\\
\epsilon &amp;= \epsilon_0 + \frac{\mu_1 v}{u + \mu_2}
&amp; \;\;\;\text{(C)}
\end{aligned}
\qquad{(36)}$$&lt;/span&gt; with constant scalar
parameters $k$, $a$,
$\epsilon_0$, $\mu_1$, and
$\mu_2$.&lt;/p&gt;
&lt;p&gt;At each point
${{\underline{{u}}}} = {{{{\left[ u, v \right]}}}^\mathrm{T}}$
of the state space, this defines a unique reaction of the cells. This
reaction is visualised as a vector function plot in
Fig. &lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/#fig:fast:ap96:statespace" &gt;5.2&lt;/a&gt;. This figure is also coloured by the
component of the reaction term in $u$-direction,
$r_u$, or in the slightly different notation of that
article $R_u$. For a starting state of
$u=0.15$ and $v=0$, following the
reaction ${{\underline{{r}}}}$ yields the trajectory
${{\underline{{u}}}}(t)$ drawn in black&amp;mdash;the path
following ${{\underline{{r}}}}$ through state space.
It describes an arc around the state space, returning to the stable
resting point, an attractor at $u=0$ and
$v=0$. Small perturbations from this point lead to a
restoring force towards the point. Diffusion and stimulus currents can
be seen as additional source terms for $u$, see also
Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;. These offsets can raise $u$ above
the critical threshold $a$ such that the system
follows a similar trajectory to the aforementioned drawn one.&lt;/p&gt;
&lt;p&gt;Therefore, under excitation, for instance from stimuli or in a spiral
wave as in Fig. &lt;a class="link" href="#fig:marcotte" &gt;12&lt;/a&gt; or Fig. &lt;a class="link" href="https://kabus.eu/2024/09/19/kabus2024ithildin/#fig:ithildin:s1s2" &gt;2.5&lt;/a&gt;, the
system&amp;rsquo;s state ${{\underline{{u}}}}$ evolves along a
loop-like trajectory. This so-called inertial manifold (&lt;a class="link" href="#ref-temam1990inertial" &gt;Temam,
1990&lt;/a&gt;) or dynamical attractor is visualised in
Fig. &lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/#fig:fast:ap96:hs2duv:count" &gt;5.3&lt;/a&gt; by colouring each point in the
state space by how often it was visited in a two-dimensional monodomain
simulation of the model by Aliev &amp;amp; Panfilov
(&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;). States near the dynamical extractor
evolve towards and follow it (&lt;a class="link" href="#ref-cross1993pattern" &gt;Cross &amp;amp; Hohenberg,
1993&lt;/a&gt;; &lt;a class="link" href="#ref-keener2004topology" &gt;Keener, 2004&lt;/a&gt;;
&lt;a class="link" href="#ref-mikhailov1994complex" &gt;Mikhailov et al., 1994&lt;/a&gt;). Encircled by the
loop-like inertial manifold is a region&amp;mdash;a &amp;ldquo;hole&amp;rdquo;&amp;mdash;which contains
significantly less likely states, i.e.,
${{\underline{{u}}}}$ that the system in a normal
excitation pattern does not evolve towards. We call this region of
unlikely states the forbidden region in the state space (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Under repeated excitation, the system keeps evolving around in this loop
in state space. So, with these cyclic trajectories in state space, it is
natural to describe the system using an angle. This so-called phase
describes the position on the cycle in state space. For a given state
space evolution
${{\underline{{u}}}}(t, {{\bm{{x}}}})$ over time
$t \in [0, T]$ for each point
${{\bm{{x}}}} \in \heartsuit$ in the medium, we get a
function ${\varphi}(t, {{\bm{{x}}}})$. We choose
${\varphi}= 0$ as the phase at the resting state, and
from there, it increases monotonously going around the loop, returning
to ${\varphi}= 2\pi = 0$ (mod
$2\pi$). The phase can be thought of as a &amp;ldquo;clock&amp;rdquo; for
the state of the cells. A small phase value means that the system just
excited, a large value closer to $2\pi$ means that
the system is recovering or recovered. The details of this depend on the
chosen definition of phase.&lt;/p&gt;
&lt;p&gt;One such definition for phase is the classical phase or activation phase
as an angle in state space (&lt;a class="link" href="#ref-bray2002considerations" &gt;Bray &amp;amp; Wikswo,
2002&lt;/a&gt;; &lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et al.,
2006&lt;/a&gt;; &lt;a class="link" href="#ref-gray1998spatial" &gt;R. A. Gray et al.,
1998&lt;/a&gt;):
&lt;span id="eq:phi:act"&gt;$$
{\varphi}_\text{act} =
\operatorname{arctan2}{{\left( R - R_*, V - V_* \right)}} + c
\qquad{(37)}$$&lt;/span&gt; where
$V$ is a variable encoding the excitation of the
system&amp;mdash;typically the transmembrane voltage $u$, and
$R$ is the restitution variable encoding the recovery
of the system. $R_*$ and $V_*$ are
constant threshold values inside the cycle&amp;rsquo;s forbidden zone, and
$c$ is an offset which is typically chosen such that
${\varphi}= 0$ corresponds to the resting state.&lt;/p&gt;
&lt;p&gt;For the definition of the restitution variable $R$,
there are a few options, which all come with their advantages and
disadvantages in describing the state of the system: One option is to
use another state variable from ${{\underline{{u}}}}$
as the restitution variable, $R = v$. This is a
common choice, particularly for two-variable models such as the models
by Aliev &amp;amp; Panfilov (&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;) or C. Mitchell
(&lt;a class="link" href="#ref-mitchellschaeffer2003model" &gt;2003&lt;/a&gt;). If there are more than two
state variables, the angle in any 2D plane in that model&amp;rsquo;s state space
may be used. In Table &lt;a class="link" href="https://kabus.eu/2022/07/12/kabus2022numerical/#tbl:numerical:simulations" &gt;3.1&lt;/a&gt;, it can be seen
that for the model by Bueno-Orovio et al. (&lt;a class="link" href="#ref-bueno2008model" &gt;2008&lt;/a&gt;),
the authors choose to use the state variables $w$ and
$s$ as $V$ and
$R$ respectively, despite both of these variables
having a less intuitive interpretation than the transmembrane voltage
$u$ (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al., 2022&lt;/a&gt;).
Another option is to extract $R$ from the temporal
evolution of $V$, e.g., $R$ as a
time delayed version of $V$ (&lt;a class="link" href="#ref-gray1995nonstationary" &gt;R. A. Gray et al.,
1995&lt;/a&gt;). This has the advantage to work when
only a single state variable $V$ of the system can be
observed. Alternatively, the Hilbert transform of $V$
may be used as $R$ (&lt;a class="link" href="#ref-bray2002considerations" &gt;Bray &amp;amp; Wikswo,
2002&lt;/a&gt;), or the exponential moving average,
see Eq. &lt;a class="link" href="#eq:ema" &gt;6&lt;/a&gt;, (&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et al.,
2024&lt;/a&gt;). This has the advantage to be more robust to
noise.&lt;/p&gt;
&lt;p&gt;Another way to define the phase is via the LAT, see
section &lt;a class="link" href="#sec:waves" &gt;1.1&lt;/a&gt;. The LAT at each point
${{\bm{{x}}}} \in \heartsuit$ over time
$t \in [0, T]$ can be defined as the last time
$t$, at which $V$ rose over a
threshold $V_*$:
&lt;span id="eq:lat"&gt;$$
t_\text{LAT} ({{\bm{{x}}}}, t)
=
\operatorname{argmax}_{t' \le t}
{{\left\{V ({{\bm{{x}}}}, t') = V_* \wedge \partial_t V ({{\bm{{x}}}}, t') &gt; 0 \right\}}}
\qquad{(38)}$$&lt;/span&gt; LAT maps can, in the
clinical context, be measured from catheter recordings in the heart
(&lt;a class="link" href="#ref-cantwell2015techniques" &gt;Cantwell et al., 2015&lt;/a&gt;), see also
section &lt;a class="link" href="#sec:ovm" &gt;1.3.2&lt;/a&gt;. These maps are then used to identify
&lt;em&gt;conduction block lines&lt;/em&gt; (CBL), i.e., lines on the surface of the heart
muscle that the conduction wave does not cross. CBLs are linked to
arrhythmogenesis (&lt;a class="link" href="#ref-ciaccio2016formation" &gt;Ciaccio et al., 2016&lt;/a&gt;),
i.e., the formation of heart rhythm disorders, such as tachycardia and
fibrillation (section &lt;a class="link" href="#sec:medicine" &gt;1&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;An LAT-based phase can be defined as (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;):
&lt;span id="eq:phi:lat"&gt;$$
{\varphi}_\text{LAT} ({{\bm{{x}}}}, t)
=
f(t - t_\text{LAT} ({{\bm{{x}}}}, t))
\qquad{(39)}$$&lt;/span&gt; with a scaling
function $f: [0,\infty) \rightarrow [0,2\pi]$, such
that: &lt;span &gt;$$
\begin{aligned}
 f(0) &amp;= 0 \\
 \lim_{\tau \to \infty} f(\tau) &amp;= 2 \pi \\
 \forall \tau: f'(\tau) &amp;\ge 0
\end{aligned}
\qquad{(40)}$$&lt;/span&gt; These properties
ensure that the LAT-based phase has the properties we expect from a
phase to be monotonously increasing from the resting state at
${\varphi}= 0$. As the time since last excitation
increases, we expect ${\varphi}$ to approach a value
close to $2\pi$. For a characteristic time
$\tau_0$ of recovery, choices for this scaling
function $f$ are $f(\tau) = 2\pi \tanh
{{\left( \frac{\tau}{\tau_0} \right)}}$ (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;), or $f(\tau) =
\frac{2\pi\tau}{\tau_0}$, clipped to the range
$[0, 2\pi]$ (&lt;a class="link" href="#ref-arno2024feynman" &gt;Arno et al.,
2024a&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In Fig. &lt;a class="link" href="https://kabus.eu/2022/07/12/kabus2022numerical/#fig:numerical:phases" &gt;3.3&lt;/a&gt;, the different phase definitions are
visually compared. For the state space phase
${\varphi}_\text{act}$ (Eq. &lt;a class="link" href="#eq:phi:act" &gt;37&lt;/a&gt;),
points where all phases meet can be found at at the centres of spiral
waves; while the LAT-based phase
${\varphi}_\text{LAT}$ (Eq. &lt;a class="link" href="#eq:phi:lat" &gt;39&lt;/a&gt;)
exhibits discontinuous jumps, e.g. at conduction block lines. So, the
different phase definitions give us different points of view on the
nature of spiral wave cores.&lt;/p&gt;
&lt;div id="sec:phase:defects"&gt;
&lt;h2 id="phase-singularities-and-phase-defects"&gt;Phase singularities and phase defects
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;There are two different but related ways of describing the centres of
spiral waves&amp;mdash;also referred to as rotor cores: &lt;em&gt;Phase singularities&lt;/em&gt;
(PSs) are located where all phases meet (&lt;a class="link" href="#ref-gray1998spatial" &gt;R. A. Gray et al.,
1998&lt;/a&gt;), while &lt;em&gt;phase defects&lt;/em&gt; (PDs) are those
points where the phase exhibits a discontinuous jump (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al., 2021&lt;/a&gt;).
PSs have co-dimension 2, meaning that in two spatial dimensions, they
are points, and in three dimensions, they are lines which are called
filaments. PDs have co-dimension 1, so in 2D, they are &lt;em&gt;phase defect
lines&lt;/em&gt; (PDLs) and in 3D, they are ribbon-like &lt;em&gt;phase defect surfaces&lt;/em&gt;
(PDSs) (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;,
&lt;a class="link" href="#ref-arno2024strings" &gt;2024b&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In Fig. &lt;a class="link" href="#fig:phases" &gt;20&lt;/a&gt;, the relation between PSs and PDs is
illustrated for a Pigreads simulation of the Karma model. In this
example, the phase was calculated for the two phase definitions
(Eqs. &lt;a class="link" href="#eq:phi:act" &gt;37&lt;/a&gt;, &lt;a class="link" href="#eq:phi:lat" &gt;39&lt;/a&gt;), then the cosine method
(Tomii et al. (&lt;a class="link" href="#ref-tomii2021spatial" &gt;2021&lt;/a&gt;), Kabus et al.
(&lt;a class="link" href="#ref-kabus2022numerical" &gt;2022&lt;/a&gt;)), which will be introduced in
&lt;a class="link" href="https://kabus.eu/2022/07/12/kabus2022numerical/" &gt;chapter 3&lt;/a&gt;
(Eq. &lt;a class="link" href="https://kabus.eu/2022/07/12/kabus2022numerical/#eq:numerical:cos:norm" &gt;3.12&lt;/a&gt;), is used to find jumps in the phase.
In the state space phase ${\varphi}_\text{act}$, PSs
can be seen, in contrast to the extended PDLs in
${\varphi}_\text{LAT}$.&lt;/p&gt;
&lt;div id="fig:phases"&gt;
&lt;p&gt;&lt;img alt="Phase singularities and defects in a simulation of the Karma model" class="gallery-image" data-flex-basis="334px" data-flex-grow="139" height="1290" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/phase-analysis/phases.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/phase-analysis/phases_hu_686f47b44fe5e2c0.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/phase-analysis/phases_hu_582b42b8d8016de2.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/phase-analysis/phases.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;Figure 20: &lt;strong&gt;Phase singularities and defects in a simulation of the
Karma model.&lt;/strong&gt; Different phase definitions were used to convert the
recordings in the variables $u$ (panel &lt;strong&gt;A.&lt;/strong&gt;) and
$v$, to the state space phase
${\varphi}_\text{act}$ (Eq. &lt;a class="link" href="#eq:phi:act" &gt;37&lt;/a&gt;, panel
&lt;strong&gt;B.&lt;/strong&gt;), or the LAT phase ${\varphi}_\text{LAT}$
(Eq. &lt;a class="link" href="#eq:phi:lat" &gt;39&lt;/a&gt;, panel &lt;strong&gt;C.&lt;/strong&gt;). The cosine method was used to
find discontinuities in the phases (Eq. &lt;a class="link" href="https://kabus.eu/2022/07/12/kabus2022numerical/#eq:numerical:cos:norm" &gt;3.12&lt;/a&gt;,
panels &lt;strong&gt;E&lt;/strong&gt; and &lt;strong&gt;F&lt;/strong&gt;, respectively). For the state space phase,
point-like PSs can be seen, while for the LAT phase, extended PDLs can
be seen (panel &lt;strong&gt;D.&lt;/strong&gt;). Note that the two PSs on the right lie on the
same PDL, a conduction block line. The region considered excited is
coloured yellow and labelled &amp;ldquo;E&amp;rdquo; in panel &lt;strong&gt;D&lt;/strong&gt;, the unexcited region is
labelled &amp;ldquo;U&amp;rdquo;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In Fig. &lt;a class="link" href="https://kabus.eu/2024/09/19/kabus2024ithildin/#fig:ithildin:bocf3d:volume" &gt;2.10&lt;/a&gt;, a similar view is provided in
3D for the model by Bueno-Orovio et al. (&lt;a class="link" href="#ref-bueno2008model" &gt;2008&lt;/a&gt;).
The PDSs are ribbon-like surfaces, here identified with a method that
ascribes them with finite thickness and filament lines.&lt;/p&gt;
&lt;p&gt;Re-entrant waves can form around an inhomogeneity in the medium&amp;mdash;like
an obstacle&amp;mdash;which is called anatomical re-entry, but they can also
exist in homogeneous tissue, where the rotor is not anchored to an
obstacle in so-called functional re-entry (&lt;a class="link" href="#ref-fenton2000transition" &gt;Fenton et al.,
2000&lt;/a&gt;). The overall behaviour of a rotor is
mainly driven by its core; if the core is undisturbed, the rotor will
persist. Describing re-entry as PSs or PDs can offer deeper insights
into the interactions of rotors with one another, how re-entrant
circuits multiply and how they can be removed. For instance, re-entry
that keeps forming around the same obstacle can be prevented via
ablation: Locate the in-excitable obstacle, for instance as PDLs in LAT
mapping recordings, and make more tissue in-excitable, for instance by
burning or freeze-burning, such that afterwards, no more anatomical
re-entry is possible around the new obstacle (&lt;a class="link" href="#ref-deisenhofer2010cryoablation" &gt;Deisenhofer et al.,
2010&lt;/a&gt;; &lt;a class="link" href="#ref-haissaguerre1998spontaneous" &gt;Haissaguerre et al.,
1998&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The detection of PDs is the topic of
&lt;a class="link" href="https://kabus.eu/2022/07/12/kabus2022numerical/" &gt;chapter 3&lt;/a&gt;, which was also published
as a scientific research paper (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;). In
&lt;a class="link" href="https://kabus.eu/2024/11/22/arno2024feynman/" &gt;chapter 4&lt;/a&gt;, another research paper
published as part of this dissertation (&lt;a class="link" href="#ref-arno2024feynman" &gt;Arno et al.,
2024a&lt;/a&gt;), the interactions of PDLs, wave fronts and
backs are for the first time studied as quasiparticles with Feynman
diagrams, a sketch of particle interactions from the field of particle
physics. The arising quasiparticles are further studied in up-coming
research by Gobeyn et al. (&lt;a class="link" href="#ref-gobeyn2025zeus" &gt;in preparation&lt;/a&gt;).&lt;/p&gt;
&lt;div id="sec:ml"&gt;
&lt;h1 id="machine-learning-techniques-for-creating-data-driven-excitation-models"&gt;Machine learning techniques for creating data-driven excitation models
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The long-term goal of computational medicine is to create personalised
digital twins&amp;mdash;a high-detail, high-fidelity, high-resolution
representation of entire organs or even the entire body of a patient
(&lt;a class="link" href="#ref-niederer2019computational" &gt;Niederer et al., 2019&lt;/a&gt;; &lt;a class="link" href="#ref-trayanova2020how" &gt;Trayanova et
al., 2020&lt;/a&gt;). A digital twin would allow testing
treatments on it first to evaluate their effectiveness and impact before
actually performing them on the patient. An ideal, full digital twin for
cardiac electrophysiology would enable faster-than-real-time simulations
of the electrical activation patterns based on all available
measurements of a patient&amp;rsquo;s heart, such as its geometry, or
&lt;em&gt;electrocardiograph&lt;/em&gt; (ECG), EGM, and mapping recordings. An ideal
digital twin would be fully data-driven, i.e., a model of the heart is
created from minimal assumptions extracting all relevant information
about the dynamics from the data.&lt;/p&gt;
&lt;p&gt;There are two fundamental challenges in creating such data-driven
digital twins:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Making use of as much of the available data as possible.&lt;/li&gt;
&lt;li&gt;Designing numerical methods that are sufficiently fast for clinical
applications.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Regarding the first point of inclusion of more data, note that most
in-silico models of cardiac electrophysiology are fitted using fairly
little data&amp;mdash;mainly patch clamping and restitution curves, as we have
discussed in section &lt;a class="link" href="#sec:rd:limitations" &gt;2.7&lt;/a&gt;. The model fitting
procedure also typically requires human input and is far from automated.
This makes these conventional models a suboptimal starting point in the
design of digital twins: They are both not data-driven and can not
easily be created automatically.&lt;/p&gt;
&lt;p&gt;Regarding the second point of computational cost, in
section &lt;a class="link" href="#sec:rd:numerical" &gt;2.3&lt;/a&gt;, we have seen that the numerical
solution of a reaction-diffusion system&amp;mdash;a system of &lt;em&gt;partial
differential equations&lt;/em&gt; (PDEs)&amp;mdash;requires adequate resolution in space
and time for numerical stability (&lt;a class="link" href="#ref-courant1928cfl" &gt;Courant et al.,
1928&lt;/a&gt;). In the context of cardiac
electrophysiology, the computational effort to resolve those systems of
equations is therefore quite high making them too slow for clinical
applications with the currently available computers: For larger tissue
volumes, resolutions are required to be roughly in the order of
$\Delta x \approx
{0.1~\mathrm{{m}{m}}}$ in three spatial dimensions and
$\Delta t \approx {0.01~\mathrm{{m}{s}}}$ in time
(&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;). As an
order-of-magnitude estimate, at this resolution, a reaction-diffusion
simulation of of an organ in size would require calculations of the
reaction term and the Laplacian on 10&lt;sup&gt;14&lt;/sup&gt;
 nodes in space and
time, i.e., 100 trillion nodes. A possible workaround to reduce the
computational cost is to use a surrogate model, i.e., an algorithm
producing good approximations of the original model while, ideally,
being much more computationally efficient (&lt;a class="link" href="#ref-raissi2019physics" &gt;Raissi et al.,
2019&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;With the tools from machine learning, many options for the design of
surrogate models and digital twins are opened up. In this section, we
present some of these possible options after we introduce some of the
basic methods which they build upon.&lt;/p&gt;
&lt;div id="sec:ml:basics"&gt;
&lt;h2 id="the-learning-problem"&gt;The learning problem
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;As a general optimisation problem consider an unknown function
${{\bm{{y}}}} = \hat
f({{\bm{{x}}}})$&amp;mdash;the target function&amp;mdash;and a data set of
$N$ pairs of input and output vectors: the inputs
${{\bm{{x}}}}_n \in \mathcal X$, indexed by
$n \in {{\left\{1, ..., N \right\}}}$ and
corresponding outputs ${{\bm{{y}}}}_n \in \mathcal Y$
(&lt;a class="link" href="#ref-abu2012learning" &gt;Abu-Mostafa et al., 2012&lt;/a&gt;). We now are looking
for the optimal function $f \in \mathcal F$ which
fits these data
${{\bm{{y}}}}_n \approx f({{\bm{{x}}}}_n)$ within a
set of possible candidate functions $\mathcal F$, the
hypothesis set. This process is called fitting the function
$f$, optimising the function, or even &amp;ldquo;learning&amp;rdquo; the
function. Except for the simplest cases, this is usually done with
computers, hence the field of function optimisation is often called
&lt;em&gt;machine learning&lt;/em&gt;.&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;More specifically, the problem of finding a function
$f$ given annotated data, points
${{\bm{{x}}}}_n$ and labels
${{\bm{{y}}}}_n$, such that
${{\bm{{y}}}}_n \approx f({{\bm{{x}}}}_n)$, is called
&lt;em&gt;supervised machine learning&lt;/em&gt;. This is in contrast to &lt;em&gt;unsupervised
machine learning&lt;/em&gt;, in which patterns in unlabelled data
${{\bm{{x}}}}_n$ should be discovered. Unsupervised
machine learning tasks are for instance finding clusters in data,
measuring the similarity of data, or finding trends in the data.
Supervised and unsupervised machine learning are often used together,
for instance, one can use principal component analysis to transform
high-dimensional data onto a space with fewer dimensions in which the
data have the most variance. In this lower-dimensional space, the set of
function candidates to be searched for an optimal solution is then also
smaller.&lt;/p&gt;
&lt;p&gt;A common way to state the so-called learning problem of supervised
machine learning is in terms of a loss function
$\mathcal L$ which is defined such that it is minimal
for the optimal choice of $f \in \mathcal F$, for
instance: &lt;span id="eq:ml:general:loss"&gt;$$
\mathcal L(f) = \frac {1}{N} \sum_{n=1}^N l{{\left( {{\bm{{y}}}}_n, f({{\bm{{x}}}}_n) \right)}}
\qquad{(41)}$$&lt;/span&gt; using a distance
function
$l : \mathcal Y \times \mathcal Y \to \mathbb R$ in
the output space $\mathcal Y$, e.g.:
&lt;span &gt;$$
l({{\bm{{y}}}}_a, {{\bm{{y}}}}_b) = {{\left\lVert {{\bm{{y}}}}_a - {{\bm{{y}}}}_b \right\rVert}}
\qquad{(42)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Many optimisation problems in supervised machine learning then take the
following form:&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Given $N$ data
${{\bm{{x}}}}_n \in \mathcal X$ and
${{\bm{{y}}}}_n \in \mathcal Y$, find the function
$f\in\mathcal F$ in the hypothesis set which
minimises the loss function $\mathcal L$
(Eq. &lt;a class="link" href="#eq:ml:general:loss" &gt;41&lt;/a&gt;).&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;While the learning problem can be stated in more general forms, this
version suffices for the methods introduced in the following.&lt;/p&gt;
&lt;div id="least-squares-method"&gt;
&lt;h2 id="least-squares-method"&gt;Least-squares method
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;As a more concrete example of an optimisation problem, consider
$N$ data points
${{\bm{{x}}}}_n \in \mathcal X \subseteq \mathbb C^{D + 1}$
in $D$ dimensions, indexed by $n
\in {{\left\{1, ..., N \right\}}}$ and
$d \in {{\left\{0, 1, ..., D \right\}}}$, and
corresponding observed scalar function values
$y_n \in \mathcal Y \subseteq \mathbb C$, sampled
from an unknown target function
$y_n = \hat f({{\bm{{x}}}}_n)$. For simpler notation,
we define the zero-th element of all vectors
${{\bm{{x}}}}_n$ to be equal to one, i.e.,
$\forall n: x_{n, 0} = 1$.&lt;/p&gt;
&lt;p&gt;One of the simplest classes of functions in this form are linear
functions, i.e., the linear regression model, using a vector of weights
${{\bm{{w}}}} \in
\mathcal W \subseteq \mathbb C^{D+1}$:
&lt;span id="eq:lsq:hypothesis"&gt;$$
y_n \approx f({{\bm{{x}}}}_n) = {{{{\bm{{w}}}}}^\mathrm{T}}{{\bm{{x}}}}_n
\qquad{(43)}$$&lt;/span&gt; Due to the convention
of defining $x_{n,0} = 1$, the zero-th element in the
weight vector $w_0$ takes the function of a so-called
bias; the entire function $f$ is shifted by this
offset. For this hypothesis set, each point in the parameter space
${{\bm{{w}}}} \in \mathcal
W$ maps to a function $f \in \mathcal F$.&lt;/p&gt;
&lt;p&gt;For the hypothesis in Eq. &lt;a class="link" href="#eq:lsq:hypothesis" &gt;43&lt;/a&gt; and Euclidean
distance in $\mathcal Y$, the loss function
Eq. &lt;a class="link" href="#eq:ml:general:loss" &gt;41&lt;/a&gt; then takes this form (&lt;a class="link" href="#ref-abu2012learning" &gt;Abu-Mostafa et al.,
2012&lt;/a&gt;):
&lt;span id="eq:lsq:loss"&gt;$$
\mathcal L({{\bm{{w}}}})
=
\frac {1}{N}
\sum_{n=1}^N {{\left\lVert y_n - {{{{\bm{{x}}}}}^\mathrm{T}}_n{{\bm{{w}}}} \right\rVert}}^2
=
\frac {1}{N}
{{\left\lVert {{\bm{{y}}}} - {{\bm{{X}}}} {{\bm{{w}}}} \right\rVert}}^2
\qquad{(44)}$$&lt;/span&gt; where we have
re-written the right-hand side using the matrix of all data points
${{\bm{{X}}}} \in \mathbb C^{N\times(D+1)}$, again
with the convention that $\forall n: x_{n,0} = 1$.&lt;/p&gt;
&lt;p&gt;To find the optimal choice of the weights
${{\bm{{w}}}}$, the parameters of the hypotheses
functions, we minimise the loss by finding the weights for which the
gradient of the loss is zero (&lt;a class="link" href="#ref-abu2012learning" &gt;Abu-Mostafa et al.,
2012&lt;/a&gt;):
&lt;span id="eq:lsq:weights"&gt;$$
\begin{aligned}
{{\bm{{0}}}}
&amp;=
N
\nabla_{{{\bm{{w}}}}}
\mathcal L({{\bm{{w}}}})
=
\nabla_{{{\bm{{w}}}}}
{{\left\lVert {{\bm{{y}}}} - {{\bm{{X}}}} {{\bm{{w}}}} \right\rVert}}^2
=
{{{{\bm{{X}}}}}^\mathrm{T}}
{{\left( {{\bm{{y}}}} - {{\bm{{X}}}} {{\bm{{w}}}} \right)}}
\\
\Rightarrow
{{\bm{{w}}}}
&amp;=
{{\left[ {{{{\bm{{X}}}}}^\mathrm{T}} {{\bm{{X}}}} \right]}}^{-1}
{{{{\bm{{X}}}}}^\mathrm{T}}
{{\bm{{y}}}}
\end{aligned}
\qquad{(45)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Therefore, to fit a linear regression with the least-squares method
(Eq. &lt;a class="link" href="#eq:lsq:weights" &gt;45&lt;/a&gt;), only matrix multiplication and matrix
inversion operations are needed; this is usually realised using Gaussian
elimination. The least-squares method gets its name from the
minimisation of a loss function that is the sum of squared distances, as
sketched in Fig. &lt;a class="link" href="#fig:lsq" &gt;21&lt;/a&gt;. Least-squares is a very robust method
due to the straight-forward use of common matrix operations and its lack
of super-parameters. It is used as a component of many other
optimisation methods when a linear function needs to be fitted.&lt;/p&gt;
&lt;div id="fig:lsq"&gt;
&lt;p&gt;&lt;img alt="Sketch of linear and parabolic least-squares fits" class="gallery-image" data-flex-basis="436px" data-flex-grow="181" height="743" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/machine-learning/lsq.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/machine-learning/lsq_hu_c0c66be090ba3c9a.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/machine-learning/lsq.png 1350w" width="1350"&gt;&lt;/p&gt;
&lt;p&gt;Figure 21: &lt;strong&gt;Sketch of linear and parabolic least-squares fits.&lt;/strong&gt; This
optimisation method finds the linear function (solid line) that
minimises the sum of the squares of the distances between predicted and
true output values $y$. The data have been sampled
from the target function (dotted) with random Gaussian additive noise.
Despite being sampled from a linear function, the fitted parabola
(dashed) has a lower loss function value.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="polynomial-fitting"&gt;&lt;/p&gt;
&lt;h2 id="polynomial-fitting"&gt;Polynomial fitting
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The least-squares method can, for instance, be used to not just fit
linear functions to data
${{\bm{{x}}}} \in \mathcal X \subseteq \mathbb C^{D + 1}$
and $y \in \mathcal Y \subseteq \mathbb C$, but any
polynomial of finite degree, such as:
&lt;span &gt;$$
\begin{aligned}
f({{\bm{{x}}}}) = f(x_1, x_2) = w + w_1 x_1 + w_2 x_2 + w_{11} x_1^2 + w_{12} x_1 x_2 + w_{22} x_2^2
\\
f({{\bm{{z}}}}) = w z_0 + w_1 z_1 + w_2 z_2 + w_{11} z_{11} + w_{12} z_{12} + w_{22} z_{22}
\end{aligned}
\qquad{(46)}$$&lt;/span&gt; Note that this
polynomial is just a linear function with respect to the polynomial
expansion ${{\bm{{z}}}}({{\bm{{x}}}})$ of the data,
which, in this case, is defined as:
&lt;span &gt;$$
{{\bm{{z}}}}({{\bm{{x}}}}) = {{{{\left[ z_0, z_1, z_2, z_{11}, z_{12}, z_{22} \right]}}}^\mathrm{T}}
= {{{{\left[ 1, x_1, x_2, x_1^2, x_1 x_2, x_2^2 \right]}}}^\mathrm{T}}
\qquad{(47)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Fitting a polynomial of a given degree can therefore be done by applying
the corresponding polynomial transform to the input data
${{\bm{{x}}}}$ followed by applying the least-squares
method to find a linear function to the transformed data
${{\bm{{z}}}}$, $y$. In
Fig. &lt;a class="link" href="#fig:lsq" &gt;21&lt;/a&gt;, a parabola is also fitted to the data using
polynomial expansion and the least-squares method.&lt;/p&gt;
&lt;div id="sec:nn"&gt;
&lt;h2 id="neural-networks"&gt;Neural networks
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The central idea behind neural networks is to approximate complex
functions by combining many simple functions. This is captured in the
universal approximation theorem, which states that a sufficiently
complex neural network can approximate any continuous function given
enough data (&lt;a class="link" href="#ref-hornik1989multilayer" &gt;Hornik et al., 1989&lt;/a&gt;). Neural
networks are inspired by the brain: Neurons are arranged in a network
and, when stimulation by its neighbouring input neurons is strong
enough, a neuron can fire which may, in turn, stimulate other neurons.&lt;/p&gt;
&lt;p&gt;As sketched in Fig. &lt;a class="link" href="#fig:nn" &gt;22&lt;/a&gt;, a neural network
${{\bm{{y}}}} = f({{\bm{{x}}}})$ consists of
$L$ layers of neurons, i.e., nodes, indexed by
$\ell \in \{0, ..., L\}$ and $d \in
\{0, ..., D_\ell\}$. The value of the zeroth layer is set to
the input,
${{\bm{{x}}}}_{0} = {{\bm{{x}}}} \in \mathbb C^{D_x+1}$;
while the output of the $L$th layer is the output of
the neural network,
${{\bm{{y}}}} = {{\bm{{x}}}}_L \in \mathbb C^{D_y+1}$.
The value $x_{\ell, d} \in \mathbb C$ of each neuron
in all layers except the zeroth is calculated based on the values
${{\bm{{x}}}}_{\ell - 1} \in \mathbb
C^{D_{\ell-1}+1}$ of the previous layer using a linear term
with weights
${{\bm{{w}}}}_{\ell, d} \in \mathbb C^{D_{\ell-1}+1}$
and a so-called activation function
$\vartheta_{\ell, d} : \mathbb C \to \mathbb C$
(&lt;a class="link" href="#ref-abu2012learning" &gt;Abu-Mostafa et al., 2012&lt;/a&gt;):
&lt;span id="eq:nn"&gt;$$
x_{\ell, d} = \vartheta_{\ell, d}{{\left( {{{{\bm{{w}}}}}^\mathrm{T}}_{\ell, d}{{\bm{{x}}}}_{\ell-1} \right)}}
\qquad{(48)}$$&lt;/span&gt; Note that again
$\forall \ell: x_{\ell, 0} = 1$, such that
$w_{\ell, d, 0}$ is the bias in the linear term.&lt;/p&gt;
&lt;div id="fig:nn"&gt;
&lt;p&gt;&lt;img alt="Sketch of a fully connected feed-forward neural network" class="gallery-image" data-flex-basis="496px" data-flex-grow="206" height="917" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2025/06/10/dissertation-intro/figures/machine-learning/nn.png" srcset="https://kabus.eu/2025/06/10/dissertation-intro/figures/machine-learning/nn_hu_b3a268577481d32.png 800w, https://kabus.eu/2025/06/10/dissertation-intro/figures/machine-learning/nn_hu_80691df4398be2f4.png 1600w, https://kabus.eu/2025/06/10/dissertation-intro/figures/machine-learning/nn.png 1896w" width="1896"&gt;&lt;/p&gt;
&lt;p&gt;Figure 22: &lt;strong&gt;Sketch of a fully connected feed-forward neural network.&lt;/strong&gt;
Each layer contains nodes, also known as neurons, whose value is
computed based on the values of the nodes in the previous layer. Each
layer contains a constant node with $x_{\ell,0} = 1$.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The activation function $\vartheta_{\ell, d}$ plays a
crucial role in neural networks as a scaling function which is applied
to the linear combination of inputs from the previous layer, introducing
non-linearities that facilitate learning complex patterns. The choice of
activation function significantly impacts a neural network&amp;rsquo;s
performance, influencing both its expressiveness and the ease of
training. Two widely used activation functions are the sigmoid function
$\vartheta_{\text{sig}}$ and the rectified linear
unit (ReLU) $\vartheta_{\text{ReLU}}$.&lt;/p&gt;
&lt;p&gt;The sigmoid function introduces smooth, differentiable non-linearity and
is defined as: &lt;span &gt;$$
\vartheta_{\text{sig}}(x) = \frac{1}{1 + {{\mathrm{e}^{-x}}}}
\qquad{(49)}$$&lt;/span&gt; However, it can
suffer from the vanishing gradient problem, which makes training deep
networks challenging (&lt;a class="link" href="#ref-hochreiter1991untersuchungen" &gt;Hochreiter,
1991&lt;/a&gt;; &lt;a class="link" href="#ref-hochreiter2001gradient" &gt;Hochreiter et al.,
2001&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The rectified linear unit (ReLU), on the other hand, is defined as:
&lt;span &gt;$$
\vartheta_{\text{ReLU}}(x) = \max(0, x)
\qquad{(50)}$$&lt;/span&gt; While not
differentiable at $x=0$, ReLU is more computationally
efficient than the sigmoid function.&lt;/p&gt;
&lt;p&gt;The weights $w_{\ell d b}$ are usually stored in a
large vector ${{\bm{{W}}}}$, which is trained using
an optimisation algorithm, such as &lt;em&gt;stochastic gradient descent&lt;/em&gt; (SGD)
or one of its variants. The optimisation algorithm changes the weights
in the direction that minimises a loss function
(Eqs. &lt;a class="link" href="#eq:ml:general:loss" &gt;41&lt;/a&gt;, &lt;a class="link" href="#eq:lsq:loss" &gt;44&lt;/a&gt;) that quantifies the
discrepancy between the output of the neural network and the target
output.&lt;/p&gt;
&lt;p&gt;To find the gradient of the loss function with respect to the weights,
the back-propagation algorithm is used. It gets its name from the fact
that, in contrast to forward propagation, which computes the output of
the network given the input, it computes the gradient of the loss
function by propagating the error backwards through the network to find
how much each node has contributed to it.&lt;/p&gt;
&lt;p&gt;At each node or neuron, the back-propagation algorithm follows the chain
rule to compute the gradient of the loss with respect to the weights. To
sketch out the back-propagation algorithm, recall this general form of
the loss function and main equation for the output of a node
(Eq. &lt;a class="link" href="#eq:nn" &gt;48&lt;/a&gt;), rewritten using the linear terms
$s_{\ell d}$:
&lt;span id="eq:nn:fwd"&gt;$$
\begin{aligned}
\mathcal L({{\bm{{W}}}}) &amp;= \sum_{d=0}^{D_L} c(x_{L d}, y_d)
\\
x_{\ell d} &amp;= \vartheta_{\ell d}(s_{\ell d})
\\
s_{\ell d} &amp;= {{{{\bm{{w}}}}}^\mathrm{T}}_{\ell d} {{\bm{{x}}}}_{\ell-1}
\end{aligned}
\qquad{(51)}$$&lt;/span&gt; For target values
${{\bm{{y}}}}$ and the predicted values
${{\bm{{x}}}}_L$, the gradient of the loss function
with respect to the weights for back-propagation is given by:
&lt;span id="eq:nn:back"&gt;$$
\begin{aligned}
 \frac{\partial \mathcal L}{\partial w_{\ell d b}}
 &amp;= \sum_{q=0}^{D_{L}} c'(x_{L q}, y_{q})
 {\frac{\partial x_{L q}}{\partial w_{\ell d b}}}
 \\
 {
 \frac{\partial x_{\ell d}}{\partial w_{k b q}}
 }
 &amp;=
 \begin{cases}
 \vartheta'_{\ell d}(s_{\ell d}) \; {\frac{\partial s_{\ell d}}{\partial w_{k b q}}}
 &amp; \text{if } \ell &gt; 0 \\
 0 &amp; \text{otherwise}
 \end{cases}
 \\
 {
 \frac{\partial s_{\ell d}}{\partial w_{k b q}}
 }
 &amp;=
 \sum_{p=0}^{D_{\ell-1}} {{\left[ w_{\ell d p} {\frac{\partial x_{\ell-1, p}}{\partial w_{k b q}}} + x_{\ell-1, p} {\frac{\partial w_{\ell d p}}{\partial w_{k b q}}} \right]}}
 \\
 {\frac{\partial w_{\ell d b}}{\partial w_{k q p}}}
 &amp;=
 \begin{cases}
 1 &amp; \text{if } \ell = k \text{ and } d = q \text{ and } b = p \\
 0 &amp; \text{otherwise}
 \end{cases}
\end{aligned}
\qquad{(52)}$$&lt;/span&gt; where
$\ell, k$ are indices of the layers and
$d, b, q, p$ are indices of the neurons in the
layers. The gradient can then be calculated by first computing the
values $x_{\ell d}$ and
$s_{\ell d}$ for all neurons in the network using
forward propagation (Eq. &lt;a class="link" href="#eq:nn:fwd" &gt;51&lt;/a&gt;), followed by calculating the
weighted sum of products in the network for each weight
(Eq. &lt;a class="link" href="#eq:nn:back" &gt;52&lt;/a&gt;). Only the edge with
$\ell = k$ and $d =
q$ and $b = p$ has a non-zero derivative
with respect to the weight $w_{k q
p}$, so only its and the weights of the edges &amp;ldquo;down-stream&amp;rdquo; of
this node contribute to its component of the gradient.&lt;/p&gt;
&lt;p&gt;As they are general function approximators, neural networks have a wide
variety of use cases. However, it can be difficult to train them, as the
number of parameters needed for many tasks can be too great to be
learned from the available data, the so-called curse of dimensionality.
There are several ways to address this issue, such as regularisation or
using algorithms that make better use of their available parameters,
such as &lt;em&gt;convolutional neural networks&lt;/em&gt; (CNNs) for input data
${{\bm{{x}}}}$ with a grid-like structure, i.e.,
images or videos.&lt;/p&gt;
&lt;p&gt;To regularise the training of neural networks, to prevent so-called
overfitting, one can, for example, randomly set a percentage of the
node&amp;rsquo;s values to zero during training, which is called dropout. This
way, the network can not rely too heavily on any individual node.
Alternatively, in so-called weight decay, one may add a term to the loss
function that &amp;ldquo;penalises&amp;rdquo; large weights, e.g. the L1 or L2 norm of the
vector of all weights ${{\bm{{W}}}}$.&lt;/p&gt;
&lt;p&gt;CNNs are well-suited for images as inputs, as they can capture spatial
patterns in the data using convolutional layers. These layers apply a
stencil to the data that combines the values in a neighbourhood of the
input data, which can extract useful features from the data. Usually,
this is implemented as weighted sums of the input data. The dense layers
of a CNN can then combine these local features to predict the output.
CNNs have been successfully applied to a variety of computer vision
tasks, such as image classification, object detection, and image
segmentation. One such application is cell counting, where CNNs have
been used to count the number of cells and nuclei in images of tissue
samples (&lt;a class="link" href="#ref-van2016deep" &gt;Van Valen et al., 2016&lt;/a&gt;; &lt;a class="link" href="#ref-weisrock2024myofinder" &gt;Weisrock et al.,
2024&lt;/a&gt;). Due to the variability in the shapes
and sizes of cells, this task is challenging using traditional image
processing techniques, while CNNs can achieve performance similar to a
human expert.&lt;/p&gt;
&lt;p&gt;In summary, neural networks and their extensions are useful tools for
general function approximation and have been applied to a wide range of
tasks.&lt;/p&gt;
&lt;div id="sec:pinn"&gt;
&lt;h2 id="physics-informed-neural-networks"&gt;Physics-informed neural networks
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Another promising use case of neural networks is to compute solutions
$u(t,
{{\bm{{x}}}})$ to PDEs of the following form, which is coined
by Raissi et al. (&lt;a class="link" href="#ref-raissi2019physics" &gt;2019&lt;/a&gt;) as &lt;em&gt;physics-informed
neural networks&lt;/em&gt; (PINNs):
&lt;span id="eq:pinn:pde"&gt;$$
\partial_t u + \mathcal D(u) = f = 0
\qquad{(53)}$$&lt;/span&gt; with a nonlinear
differential operator $\mathcal D(u)$ in space, to be
amended with boundary and initial conditions in $u$.
We define the left hand side as $f(t, {{\bm{{x}}}})$,
the residual of the PDE. The solution
$u(t, {{\bm{{x}}}})$ is then described using a neural
network. It is the solution to this particular instance of the problem;
for different initial and boundary conditions, another solution must be
found and the neural network re-trained from scratch. PDEs that fulfil
Eq. &lt;a class="link" href="#eq:pinn:pde" &gt;53&lt;/a&gt; are for instance the reaction-diffusion equation
(Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;) or the one-dimensional Burgers&amp;rsquo; equation:
&lt;span id="eq:pinn:pde:burgers"&gt;$$
\partial_t u + u \partial_x u - c \partial_x^2 u = f = 0
\qquad{(54)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As the term &amp;ldquo;physics-informed&amp;rdquo; implies, the physical knowledge of the
PDE governing the system is included as regularisation terms in the
to-be-minimised loss function which penalises unrealistic solutions:
&lt;span &gt;$$
\mathcal L
=
\frac {1}{N} \sum_{n=1}^N {{\left\lVert u_n - u(t_n, {{\bm{{x}}}}_n) \right\rVert}}^2
+
\frac {1}{C} \sum_{c=1}^C {{\left\lVert f(t_c, x_c) \right\rVert}}^2
\qquad{(55)}$$&lt;/span&gt; We here use
$N$ labelled training data points
$t_n, {{\bm{{x}}}}_n, u_n$; and
$C$ collocation points
$t_c, {{\bm{{x}}}}_c$, at which to check the PDE
(Eq. &lt;a class="link" href="#eq:pinn:pde" &gt;53&lt;/a&gt;). Additional terms can be added to enforce, for
instance, boundary conditions or initial conditions.&lt;/p&gt;
&lt;p&gt;This physics-based regularisation has the additional benefit to make
this method quite robust to overfitting to the data. PINNs can also work
without discretisation of domain and time. The neural network
$u$ is trained as usual, for example, using gradient
descent, or a quasi-Newton method, enabling the use of the robust
machine learning libraries developed in the last decades. The
derivatives of $u$ in the loss function can be found
using automatic differentiation, i.e., the exact derivatives of the
neural network can be found analytically based on the chosen network
architecture. More structure can also be imposed on the neural network,
for instance a forward Euler or Runge-Kutta time-stepping scheme of high
order, resulting in a &lt;em&gt;discrete time model&lt;/em&gt; (&lt;a class="link" href="#ref-raissi2019physics" &gt;Raissi et al.,
2019&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;PINNs have been successfully used to solve various problems, e.g.,
starting with the Burgers&amp;rsquo; equation, and Schrödinger&amp;rsquo;s equation (&lt;a class="link" href="#ref-raissi2019physics" &gt;Raissi
et al., 2019&lt;/a&gt;), to fluid mechanics (&lt;a class="link" href="#ref-cai2021physics" &gt;Cai et al.,
2021&lt;/a&gt;), meteorology, chemical engineering, and
biophysics (&lt;a class="link" href="#ref-toscano2024pinns" &gt;Toscano et al., 2024&lt;/a&gt;). PINNs have
also been used in the context of cardiology: for the reconstruction of
LAT maps from sparse recordings (&lt;a class="link" href="#ref-sahlicostabal2020eikonalpinns" &gt;Costabal et al.,
2020&lt;/a&gt;), the reconstruction of
excitation waves from mechanical deformation (&lt;a class="link" href="#ref-dermul2024reconstruction" &gt;Dermul &amp;amp; Dierckx,
2024&lt;/a&gt;), or as a surrogate model for
reaction-diffusion systems for the model by Aliev &amp;amp; Panfilov
(&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;; &lt;a class="link" href="#ref-herreromartin2022eppinns" &gt;Martin et al.,
2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Another use case of PINNs is data-driven discovery of PDEs: Given data
from a solution to a system of PDEs, it is possible to recover not only
the solution to this system but also system parameters (&lt;a class="link" href="#ref-raissi2019physics" &gt;Raissi et al.,
2019&lt;/a&gt;). The data-driven discovery of PDEs via
PINNs could also be applied to find cardiac electrophysiology model
parameters.&lt;/p&gt;
&lt;div id="sec:ml:cardiac"&gt;
&lt;h2 id="creation-of-data-driven-cardiac-excitation-models"&gt;Creation of data-driven cardiac excitation models
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Besides the aforementioned PINN-based approaches, a variety of other
machine learning techniques have been tried to create cardiac excitation
models to various degrees of success. In simple terms, the goal is to
approximate the dynamics described by the bi- or monodomain descriptions
using more versatile and faster models that can be trained on data.&lt;/p&gt;
&lt;p&gt;One simple approach to this task is to approximate the reaction term in
the reaction-diffusion equation (Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;) with a neural
network: &lt;span &gt;$$
\partial_t {{\underline{{u}}}}
=
{{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}
+
{{\underline{{r}}}}_\text{NN} ({{\underline{{u}}}})
\qquad{(56)}$$&lt;/span&gt; However, this
approach is futile because, in most cases, only some of the elements of
the reaction term can be directly measured in experiments. One could
however use a neural network in this way to approximate an existing
model, yielding a surrogate model that, depending on the complexity of
the original model, could be faster to evaluate. The numerical solution
of the system remains the same though: The reaction-diffusion equation
still needs to be solved and the usual constraints of the CFL condition
(Eq. &lt;a class="link" href="#eq:cfl" &gt;26&lt;/a&gt;) apply. Meaning, the speed-up would only be marginal.&lt;/p&gt;
&lt;p&gt;Another naive approach is to use a dense neural network to approximate
the entire right-hand side of the reaction-diffusion equation
(Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;) at lower resolution in space and time:
&lt;span id="eq:rd:nn:naive"&gt;$$
\partial_t {{\underline{{u}}}}
=
{{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}
+
{{\underline{{r}}}} ({{\underline{{u}}}})
\approx
\dot{{{\underline{{u}}}}}_\text{NN} {{\left( {{\left\{{{\underline{{u}}}}_n \right\}}}_{n=1}^N \right)}}
\qquad{(57)}$$&lt;/span&gt; where the state
vectors ${{\underline{{u}}}}_n$ at
$N$ points in the neighbourhood of
${{\underline{{u}}}}$ are used as input of the neural
network. This approach also has some notable drawbacks: The dimension of
the network&amp;rsquo;s input space is quite large as it grows with the number of
points $N$ and the dimension of the state vector
${{\underline{{u}}}}$. So, the network also needs to
be quite large and hence has a lot of parameters to train, requiring
more data and more time for training. Also, no information about the
spatial structure is used, so the network has to learn the spatial
structure from scratch. There is also no information about the
underlying physics, further increasing the complexity of the task.&lt;/p&gt;
&lt;p&gt;One could remedy the latter two drawbacks by using a CNN instead of a
dense network. A selection of spatial features could be extracted by
convolutional layers $\hat u_\text{conv}$ and
subsequently used by a dense neural network
$\dot{{{\underline{{u}}}}}_\text{dense}$:
&lt;span &gt;$$
\partial_t {{\underline{{u}}}}
=
{{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}
+
{{\underline{{r}}}} ({{\underline{{u}}}})
\approx
\dot{{{\underline{{u}}}}}_\text{dense} {{\left( \hat u_\text{conv}{{\left( {{\left\{{{\underline{{u}}}}_n \right\}}}_{n=1}^N \right)}} \right)}}
\qquad{(58)}$$&lt;/span&gt; This approach has the
advantage that the network can be trained to learn spatial features
reducing the number of parameters compared to Eq. &lt;a class="link" href="#eq:rd:nn:naive" &gt;57&lt;/a&gt;.
However, the network still has to learn the underlying physics from
scratch. We found that the spatial features extracted can be enough to
describe the diffusion term, and hence the spread of the excitation
wave, but not the reaction term. The restitution characteristics of the
tissue involve temporal features that are not included in the spatial
features extracted by the convolutional layers. We therefore would also
need to include points from previous time steps in the input of the
network, increasing the dimensional complexity of the task yet again.
The dense network would get both spatial and temporal features as input.&lt;/p&gt;
&lt;p&gt;Now, we propose to only use features that are known to be relevant for
excitation waves in cardiac electrophysiology. For the purposes of this
project, this is the approach that gave the best results. In a first
prototype with code name Melange, we used a dense neural network to
approximate the reaction-diffusion equation (Eq. &lt;a class="link" href="#eq:rd" &gt;22&lt;/a&gt;) with a
reduced set of features extracted from optical voltage mapping data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the transmembrane voltage $u$, proportional to
the change in observed light intensity,&lt;/li&gt;
&lt;li&gt;approximate monopolar EGMs $u_\text{EGM}$
(Eq. &lt;a class="link" href="#eq:egm" &gt;9&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;a moving average $\tilde u$ of the transmembrane
potential $u$ over the last few time steps
(Eq. &lt;a class="link" href="#eq:ema" &gt;6&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;the absolute value
${{\left\lVert \nabla u \right\rVert}}$ of the
gradient of the transmembrane voltage,&lt;/li&gt;
&lt;li&gt;the local activation time phase
${\varphi}_\text{LAT}$ (Eq. &lt;a class="link" href="#eq:phi:lat" &gt;39&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;the APD of the most recent pulse (Eq. &lt;a class="link" href="#eq:apd" &gt;1&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;and DI between the two most recent activations (Eq. &lt;a class="link" href="#eq:di" &gt;2&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Or, expressed as a PDE: &lt;span &gt;$$
\partial_t {{\underline{{u}}}}
=
{{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}
+
{{\underline{{r}}}} ({{\underline{{u}}}})
\approx
\dot{{{\underline{{u}}}}}_\text{Melange} {{\left( u, u_\text{EGM}, \tilde u, {{\left\lVert \nabla u \right\rVert}}, {\varphi}_\text{LAT}, t_\text{APD}, t_\text{DI} \right)}}
\qquad{(59)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In further research, we streamlined this model to only use the
transmembrane potential $u$ and the moving average
$\tilde u$ as input features, as well as an
approximation $g$ of the gradient
${{\left\lVert \nabla u \right\rVert}}$ calculated
using the standard deviation of $u$ in a small
neighbourhood around each point. This model&amp;mdash;code named Distephym,
short for data-driven in-silico tissue-based electrophysiology
model&amp;mdash;is the subject of &lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/" &gt;chapter 5&lt;/a&gt; and
has been published as a standalone paper (&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et al.,
2024&lt;/a&gt;): &lt;span &gt;$$
\partial_t {{\underline{{u}}}}
=
{{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}
+
{{\underline{{r}}}} ({{\underline{{u}}}})
\approx
\dot{{{\underline{{u}}}}}_\text{Distephym} {{\left( u, \tilde u, g \right)}}
\qquad{(60)}$$&lt;/span&gt; Instead of a neural
network, a low-order polynomial
$\dot{{{\underline{{u}}}}}_\text{Distephym}$ is
fitted to the data. The method is used to both fit a surrogate model of
an existing in-silico tissue model, i.e., the model by Aliev &amp;amp; Panfilov
(&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;), and the method is used to create a model
based on in-vitro data&amp;mdash;optical voltage mapping data of human atrial
myocytes (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al., 2022&lt;/a&gt;). Even when the
model is only trained on data from focal excitation waves, it is able to
predict the dynamics of spiral waves. The optimisation method of the
Distephym models is automated to such an extent that only minimal input
is needed to create a model from the spatio-temporal recordings of
excitation waves&amp;mdash;i.e., optical voltage mapping data. This model which
can run at much lower resolutions in time and space, will be discussed
in detail in &lt;a class="link" href="https://kabus.eu/2024/01/03/kabus2024fast/" &gt;chapter 5&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The fast and automatic creation of data-driven models is a crucial step
forward in the continued study of heart rhythm disorders. The speed-up
holds promise to improve the use of computer models to predict the
outcome of surgery or therapy, advancing towards a true cardiac digital
twin.&lt;/p&gt;
&lt;div &gt;
&lt;/div&gt;
&lt;div &gt;
&lt;h1 id="references"&gt;References
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="refs" class="references csl-bib-body hanging-indent" entry-spacing="0" line-spacing="2"&gt;
&lt;div id="ref-abu2012learning" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Abu-Mostafa, Y. S., Magdon-Ismail, M., &amp;amp; Lin, H.-T. (2012). &lt;em&gt;Learning
from data&lt;/em&gt; (Vol. 4). AMLBook New York.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-lifexep" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Africa, P. C., Piersanti, R., Regazzoni, F., Bucelli, M., Salvador, M.,
Fedele, M., Pagani, S., Dede&amp;rsquo;, L., &amp;amp; Quarteroni, A. (2023).
&lt;span &gt;Lifex-Ep&lt;/span&gt;: A robust
and efficient software for cardiac electrophysiology simulations. &lt;em&gt;BMC
Bioinformatics&lt;/em&gt;, &lt;em&gt;24&lt;/em&gt;(1), 389.
&lt;a class="link" href="https://doi.org/10.1186/s12859-023-05513-8" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1186/s12859-023-05513-8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-alberts2002molecular" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Alberts, B., Johnson, A., Lewis, J., Raff, M., Roberts, K., &amp;amp; Walter, P.
(2002). &lt;em&gt;Molecular biology of the cell&lt;/em&gt; (4th ed.). Garland Science.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-aliev1996simple" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Aliev, R. R., &amp;amp; Panfilov, A. V. (1996). A simple two-variable model of
cardiac excitation. &lt;em&gt;Chaos, Solitons &amp;amp; Fractals&lt;/em&gt;, &lt;em&gt;7&lt;/em&gt;(3), 293&amp;ndash;301.
&lt;a class="link" href="https://doi.org/10.1016/0960-0779%2895%2900089-5" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0960-0779(95)00089-5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-beatbox" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Antonioletti, M., Biktashev, V. N., Jackson, A., Kharche, S. R., Stary,
T., &amp;amp; Biktasheva, I. V. (2017).
&lt;span &gt;BeatBox&lt;/span&gt;&amp;mdash;&lt;span &gt;HPC&lt;/span&gt;
simulation environment for biophysically and anatomically realistic
cardiac electrophysiology. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(5), e0172292.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0172292" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0172292&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gems" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arens, S., Dierckx, H., &amp;amp; Panfilov, A. V. (2018).
&lt;span &gt;GEMS&lt;/span&gt;: A fully
integrated
&lt;span &gt;PETSc&lt;/span&gt;-based solver
for coupled cardiac electromechanics and bidomain simulations.
&lt;em&gt;Frontiers in Physiology&lt;/em&gt;, &lt;em&gt;9&lt;/em&gt;, 1431.
&lt;a class="link" href="https://doi.org/10.3389/fphys.2018.01431" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fphys.2018.01431&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arno2024feynman" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arno, L., Kabus, D., &amp;amp; Dierckx, H. (2024a). Analysis of complex
excitation patterns using
&lt;span class="nocase"&gt;Feynman-like&lt;/span&gt;
diagrams. &lt;em&gt;Scientific Reports&lt;/em&gt;, &lt;em&gt;14&lt;/em&gt;(1), 28962.
&lt;a class="link" href="https://doi.org/10.1038/s41598-024-73544-z" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41598-024-73544-z&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arno2024strings" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arno, L., Kabus, D., &amp;amp; Dierckx, H. (2024b). Strings, branes and
twistons: Topological analysis of phase defects in excitable media such
as the heart. In &lt;em&gt;arXiv preprint arXiv:2401.02571&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.48550/arXiv.2401.02571" target="_blank" rel="noopener"
 &gt;https://doi.org/10.48550/arXiv.2401.02571&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arno2021phase" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arno, L., Quan, J., Nguyen, N. T., Vanmarcke, M., Tolkacheva, E. G., &amp;amp;
Dierckx, H. (2021). A phase defect framework for the analysis of cardiac
arrhythmia patterns. &lt;em&gt;Frontiers in Physiology&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.3389/fphys.2021.690453" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fphys.2021.690453&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-barkley1991model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Barkley, D. (1991). A model for fast computer simulation of waves in
excitable media. &lt;em&gt;Physica D: Nonlinear Phenomena&lt;/em&gt;, &lt;em&gt;49&lt;/em&gt;(1-2), 61&amp;ndash;70.
&lt;a class="link" href="https://doi.org/10.1016/0167-2789%2891%2990194-e" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0167-2789(91)90194-e&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bayly1998estimation" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bayly, P. V., KenKnight, B. H., Rogers, J. M., Hillsley, R. E., Ideker,
R. E., &amp;amp; Smith, W. M. (1998). Estimation of conduction velocity vector
fields from epicardial mapping data. &lt;em&gt;IEEE Transactions on Biomedical
Engineering&lt;/em&gt;, &lt;em&gt;45&lt;/em&gt;(5), 563&amp;ndash;571. &lt;a class="link" href="https://doi.org/10.1109/10.668746" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/10.668746&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-berte2020impact" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Berte, B., Zeppenfeld, K., &amp;amp; Tung, R. (2020). Impact of micro-, mini-and
multi-electrode mapping on ventricular substrate characterisation.
&lt;em&gt;Arrhythmia &amp;amp; Electrophysiology Review&lt;/em&gt;, &lt;em&gt;9&lt;/em&gt;(3), 128.
&lt;a class="link" href="https://doi.org/10.15420/aer.2020.24" target="_blank" rel="noopener"
 &gt;https://doi.org/10.15420/aer.2020.24&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bhagirath2024bits" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bhagirath, P., Strocchi, M., Bishop, M. J., Boyle, P. M., &amp;amp; Plank, G.
(2024). From bits to bedside: Entering the age of digital twins in
cardiac electrophysiology. &lt;em&gt;Europace&lt;/em&gt;, &lt;em&gt;26&lt;/em&gt;(12), euae295.
&lt;a class="link" href="https://doi.org/10.1093/europace/euae295" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1093/europace/euae295&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bray2002considerations" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bray, M.-A., &amp;amp; Wikswo, J. P. (2002). Considerations in phase plane
analysis for nonstationary reentrant cardiac behavior. &lt;em&gt;Physical Review
E&lt;/em&gt;, &lt;em&gt;65&lt;/em&gt;(5), 051902. &lt;a class="link" href="https://doi.org/10.1103/PhysRevE.65.051902" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevE.65.051902&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bueno2008model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bueno-Orovio, A., Cherry, E. M., &amp;amp; Fenton, F. H. (2008). Minimal model
for human ventricular action potentials in tissue. &lt;em&gt;Journal of
Theoretical Biology&lt;/em&gt;, &lt;em&gt;253&lt;/em&gt;(3), 544&amp;ndash;560.
&lt;a class="link" href="https://doi.org/10.1016/j.jtbi.2008.03.029" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jtbi.2008.03.029&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-byrne2015exact" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Byrne, G., Marcotte, C. D., &amp;amp; Grigoriev, R. O. (2015). Exact coherent
structures and chaotic dynamics in a model of cardiac tissue. &lt;em&gt;Chaos: An
Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;25&lt;/em&gt;(3), 033108.
&lt;a class="link" href="https://doi.org/10.1063/1.4915143" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.4915143&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cai2021physics" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cai, S., Mao, Z., Wang, Z., Yin, M., &amp;amp; Karniadakis, G. E. (2021).
Physics-informed neural networks (PINNs) for fluid mechanics: A review.
&lt;em&gt;Acta Mechanica Sinica&lt;/em&gt;, &lt;em&gt;37&lt;/em&gt;(12), 1727&amp;ndash;1738.
&lt;a class="link" href="https://doi.org/10.1007/s10409-021-01148-1" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/s10409-021-01148-1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cannon2014neurosystems" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cannon, J., McCarthy, M. M., Lee, S., Lee, J., Börgers, C., Whittington,
M. A., &amp;amp; Kopell, N. (2014). Neurosystems: Brain rhythms and cognitive
processing. &lt;em&gt;European Journal of Neuroscience&lt;/em&gt;, &lt;em&gt;39&lt;/em&gt;(5), 705&amp;ndash;719.
&lt;a class="link" href="https://doi.org/10.1111/ejn.12453" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1111/ejn.12453&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cantwell2015techniques" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cantwell, C. D., Roney, C. H., Ng, F. S., Siggers, J. H., Sherwin, S.
J., &amp;amp; Peters, N. S. (2015). Techniques for automated local activation
time annotation and conduction velocity estimation in cardiac mapping.
&lt;em&gt;Computers in Biology and Medicine&lt;/em&gt;, &lt;em&gt;65&lt;/em&gt;, 229&amp;ndash;242.
&lt;a class="link" href="https://doi.org/10.1016/j.compbiomed.2015.04.027" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.compbiomed.2015.04.027&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-ceps" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;CARMEN. (2024). &lt;em&gt;Cardiac &lt;span &gt;ElectroPhysiology
Simulator&lt;/span&gt;
(&lt;span &gt;CEPS&lt;/span&gt;)&lt;/em&gt;. IHU Liryc,
Inria. &lt;a class="link" href="https://carmen.gitlabpages.inria.fr/ceps/" target="_blank" rel="noopener"
 &gt;https://carmen.gitlabpages.inria.fr/ceps/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-chen2025transforming" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Chen, S., Fan, S., Qiao, Z., Wu, Z., Lin, B., Li, Z., Riegler, M. A.,
Wong, M. Y. H., Opheim, A., Korostynska, O., et al. (2025). Transforming
healthcare:
&lt;span &gt;Intelligent&lt;/span&gt; wearable
sensors empowered by smart materials and artificial intelligence.
&lt;em&gt;Advanced Materials&lt;/em&gt;, 2500412. &lt;a class="link" href="https://doi.org/10.1002/adma.202500412" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1002/adma.202500412&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-ciaccio2016formation" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Ciaccio, E. J., Coromilas, J., Wit, A. L., Peters, N. S., &amp;amp; Garan, H.
(2016). Formation of functional conduction block during the onset of
reentrant ventricular tachycardia. &lt;em&gt;Circulation: Arrhythmia and
Electrophysiology&lt;/em&gt;, &lt;em&gt;9&lt;/em&gt;(12), e004462.
&lt;a class="link" href="https://doi.org/10.1161/CIRCEP.116.004462" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/CIRCEP.116.004462&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clayton2011review" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clayton, R., Bernus, O., Cherry, E. M., Dierckx, H., Fenton, F. H.,
Mirabella, L., Panfilov, A. V., Sachse, F. B., Seemann, G., &amp;amp; Zhang, H.
(2011). Models of cardiac tissue electrophysiology: Progress, challenges
and open questions. &lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;,
&lt;em&gt;104&lt;/em&gt;(1-3), 22&amp;ndash;48. &lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2010.05.008" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2010.05.008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clayton2006phase" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clayton, R., Zhuchkova, E., &amp;amp; Panfilov, A. (2006). Phase singularities
and filaments:
&lt;span &gt;Simplifying&lt;/span&gt;
complexity in computational models of ventricular fibrillation.
&lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;, &lt;em&gt;90&lt;/em&gt;(1-3), 378&amp;ndash;398.
&lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2005.06.011" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2005.06.011&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-chaste" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cooper, F. R., Baker, R. E., Bernabeu, M. O., Bordas, R., Bowler, L.,
Bueno-Orovio, A., Byrne, H. M., Carapella, V., Cardone-Noott, L.,
Cooper, J., Dutta, S., Evans, B. D., Fletcher, A. G., Grogan, J. A.,
Guo, W., Harvey, D. G., Hendrix, M., Kay, D., Kursawe, J., Maini, P. K.,
McMillan, B., Mirams, G. R., Osborne, J. M., Pathmanathan, P.,
Pitt-Francis, J. M., Robinson, M., Rodriguez, B., Spiteri, R. J., &amp;amp;
Gavaghan, D. J. (2020). Chaste:
&lt;span &gt;Cancer&lt;/span&gt;,
&lt;span &gt;Heart&lt;/span&gt; and
&lt;span &gt;Soft Tissue
Environment&lt;/span&gt;. &lt;em&gt;Journal of Open Source
Software&lt;/em&gt;, &lt;em&gt;5&lt;/em&gt;(47), 1848. &lt;a class="link" href="https://doi.org/10.21105/joss.01848" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.01848&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-sahlicostabal2020eikonalpinns" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Costabal, F. S., Yang, Y., Perdikaris, P., Hurtado, D. E., &amp;amp; Kuhl, E.
(2020). Physics-informed neural networks for cardiac activation mapping.
&lt;em&gt;Frontiers in Physics&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;. &lt;a class="link" href="https://doi.org/10.3389/fphy.2020.00042" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fphy.2020.00042&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-courant1928cfl" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Courant, R., Friedrichs, K., &amp;amp; Lewy, H. (1928).
&lt;span &gt;&lt;span &gt;Ü&lt;/span&gt;ber
die partiellen Differenzengleichungen der mathematischen
Physik&lt;/span&gt;. &lt;em&gt;Mathematische Annalen&lt;/em&gt;, &lt;em&gt;100&lt;/em&gt;(1),
32&amp;ndash;74. &lt;a class="link" href="https://doi.org/10.1007/BF01448839" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/BF01448839&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-courtemanche1998ionic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Courtemanche, M., Ramirez, R. J., &amp;amp; Nattel, S. (1998). Ionic mechanisms
underlying human atrial action potential properties: Insights from a
mathematical model. &lt;em&gt;American Journal of Physiology-Heart and
Circulatory Physiology&lt;/em&gt;, &lt;em&gt;275&lt;/em&gt;(1), H301&amp;ndash;H321.
&lt;a class="link" href="https://doi.org/10.1152/ajpheart.1998.275.1.H301" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.1998.275.1.H301&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cross1993pattern" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cross, M. C., &amp;amp; Hohenberg, P. C. (1993). Pattern formation outside of
equilibrium. &lt;em&gt;Rev. Modern Phys.&lt;/em&gt;, &lt;em&gt;65&lt;/em&gt;(3), 851.
&lt;a class="link" href="https://doi.org/10.1103/RevModPhys.65.851" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/RevModPhys.65.851&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-davydov2000drift" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Davydov, V., Zykov, V., &amp;amp; Yamaguchi, T. (2000). Drift of spiral waves on
nonuniformly curved surfaces. &lt;em&gt;Macromolecular Symposia&lt;/em&gt;, &lt;em&gt;160&lt;/em&gt;, 99&amp;ndash;106.
&lt;a class="link" href="https://doi.org/10.1002/1521-3900%28200010%29160:1%3c99::AID-MASY99%3e3.0.CO;2-Y" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1002/1521-3900(200010)160:1&amp;lt;99::AID-MASY99&amp;gt;3.0.CO;2-Y&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-decoster2025ionic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;De Coster, T., Kabus, D., Verkerk, A. O., Veldkamp, M. W., Harlaar, N.,
Dekker, S. O., Vries, A. A. F. de, Pijnappels, D. A., &amp;amp; Panfilov, A. V.
(in preparation). &lt;em&gt;Ionic mechanisms underlying human immortalised atrial
action potential properties: Insights from a mathematical model&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-deisenhofer2010cryoablation" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Deisenhofer, I., Zrenner, B., Yin, Y., Pitschner, H.-F., Kuniss, M.,
Großmann, G., Stiller, S., Luik, A., Veltmann, C., Frank, J., et al.
(2010). Cryoablation versus radiofrequency energy for the ablation of
atrioventricular nodal reentrant tachycardia (the
&lt;span &gt;CYRANO&lt;/span&gt; study)
results from a large multicenter prospective randomized trial.
&lt;em&gt;Circulation&lt;/em&gt;, &lt;em&gt;122&lt;/em&gt;(22), 2239&amp;ndash;2245.
&lt;a class="link" href="https://doi.org/10.1161/CIRCULATIONAHA.110.970350" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/CIRCULATIONAHA.110.970350&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-dermul2024reconstruction" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Dermul, N., &amp;amp; Dierckx, H. (2024). Reconstruction of excitation waves
from mechanical deformation using physics-informed neural networks.
&lt;em&gt;Scientific Reports&lt;/em&gt;, &lt;em&gt;14&lt;/em&gt;(1), 16975.
&lt;a class="link" href="https://doi.org/10.1038/s41598-024-67597-3" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41598-024-67597-3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-dierckx2013drift" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Dierckx, H., Brisard, E., Verschelde, H., &amp;amp; Panfilov, A. V. (2013).
Drift laws for spiral waves on curved anisotropic surfaces. &lt;em&gt;Physical
Review E&lt;/em&gt;, &lt;em&gt;88&lt;/em&gt;, 012908. &lt;a class="link" href="https://doi.org/10.1103/PhysRevE.88.012908" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevE.88.012908&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-du2012cuda" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Du, P., Weber, R., Luszczek, P., Tomov, S., Peterson, G., &amp;amp; Dongarra, J.
(2012). From &lt;span &gt;CUDA&lt;/span&gt; to
&lt;span &gt;OpenCL&lt;/span&gt;: Towards a
performance-portable solution for multi-platform
&lt;span &gt;GPU&lt;/span&gt; programming.
&lt;em&gt;Parallel Computing&lt;/em&gt;, &lt;em&gt;38&lt;/em&gt;(8), 391&amp;ndash;407.
&lt;a class="link" href="https://doi.org/10.1016/j.parco.2011.10.002" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.parco.2011.10.002&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-entcheva2021cardiac" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Entcheva, E., &amp;amp; Kay, M. W. (2021). Cardiac optogenetics: A decade of
enlightenment. &lt;em&gt;Nature Reviews Cardiology&lt;/em&gt;, &lt;em&gt;18&lt;/em&gt;(5), 349&amp;ndash;367.
&lt;a class="link" href="https://doi.org/10.1038/s41569-020-00478-0" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41569-020-00478-0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fenton1998vortex" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Fenton, F. H., &amp;amp; Karma, A. (1998). Vortex dynamics in three-dimensional
continuous myocardium with fiber rotation: Filament instability and
fibrillation. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;(1), 20&amp;ndash;47. &lt;a class="link" href="https://doi.org/10.1063/1.166311" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166311&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fenton2000transition" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Fenton, F. H., Karma, A., Hastings, H. M., &amp;amp; Evans, S. J. (2000).
Transition from ventricular tachycardia to ventricular fibrillation as
function of tissue characteristics computer model. &lt;em&gt;Proceedings of the
22nd Annual International Conference of the IEEE Engineering in Medicine
and Biology Society (Cat. No. 00CH37143)&lt;/em&gt;, &lt;em&gt;1&lt;/em&gt;, 391&amp;ndash;394.
&lt;a class="link" href="https://doi.org/10.1109/IEMBS.2000.900757" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/IEMBS.2000.900757&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-simcardems" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Finsberg, H. N. T., van Herck, I. G. M., Daversin-Catty, C., Arevalo,
H., &amp;amp; Wall, S. (2023).
&lt;span class="nocase"&gt;simcardems&lt;/span&gt;:
A &lt;span &gt;FEniCS&lt;/span&gt;-based
cardiac electro-mechanics solver. &lt;em&gt;Journal of Open Source Software&lt;/em&gt;,
&lt;em&gt;8&lt;/em&gt;(81), 4753. &lt;a class="link" href="https://doi.org/10.21105/joss.04753" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.04753&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fitzhugh1961impulses" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;FitzHugh, R. (1961). Impulses and physiological states in theoretical
models of nerve membrane. &lt;em&gt;Biophysical Journal&lt;/em&gt;, &lt;em&gt;1&lt;/em&gt;(6), 445&amp;ndash;466.
&lt;a class="link" href="https://doi.org/10.1016/s0006-3495%2861%2986902-6" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/s0006-3495(61)86902-6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gillette2021framework" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gillette, K., Gsell, M. A. F., Prassl, A. J., Karabelas, E., Reiter, U.,
Reiter, G., Grandits, T., Payer, C., Štern, D., Urschler, M., Bayer, J.
D., Augustin, C. M., Neic, A., Pock, T., Vigmond, E. J., &amp;amp; Plank, G.
(2021). A framework for the generation of digital twins of cardiac
electrophysiology from clinical 12-leads
&lt;span &gt;ECGs&lt;/span&gt;. &lt;em&gt;Medical Image
Analysis&lt;/em&gt;, &lt;em&gt;71&lt;/em&gt;, 102080. &lt;a class="link" href="https://doi.org/10.1016/j.media.2021.102080" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.media.2021.102080&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gobeyn2025zeus" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gobeyn, A., Kabus, D., &amp;amp; Dierckx, H. (in preparation).
&lt;em&gt;&lt;span &gt;ZEUS&lt;/span&gt; method for the
numerical detection of topological quasiparticles arising in the context
of excitable media&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-openmpi" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Graham, R. L., Shipman, G. M., Barrett, B. W., Castain, R. H., Bosilca,
G., &amp;amp; Lumsdaine, A. (2006). Open MPI: A high-performance, heterogeneous
MPI. &lt;em&gt;2006 IEEE Int. Conf. On Cluster Computing&lt;/em&gt;, 1&amp;ndash;9.
&lt;a class="link" href="https://doi.org/10.1109/CLUSTR.2006.311904" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/CLUSTR.2006.311904&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gray1983autocatalytic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gray, P., &amp;amp; Scott, S. (1983). Autocatalytic reactions in the isothermal,
continuous stirred tank reactor: Isolas and other forms of
multistability. &lt;em&gt;Chemical Engineering Science&lt;/em&gt;, &lt;em&gt;38&lt;/em&gt;(1), 29&amp;ndash;43.
&lt;a class="link" href="https://doi.org/10.1016/0009-2509%2883%2980132-8" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0009-2509(83)80132-8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gray1995nonstationary" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gray, R. A., Jalife, J., Panfilov, A., Baxter, W. T., Cabo, C.,
Davidenko, J. M., &amp;amp; Pertsov, A. M. (1995). Nonstationary vortexlike
reentrant activity as a mechanism of polymorphic ventricular tachycardia
in the isolated rabbit heart. &lt;em&gt;Circulation&lt;/em&gt;, &lt;em&gt;91&lt;/em&gt;(9), 2454&amp;ndash;2469.
&lt;a class="link" href="https://doi.org/10.1161/01.CIR.91.9.2454" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.CIR.91.9.2454&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gray1998spatial" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gray, R. A., Pertsov, A. M., &amp;amp; Jalife, J. (1998). Spatial and temporal
organization during cardiac fibrillation. &lt;em&gt;Nature&lt;/em&gt;, &lt;em&gt;392&lt;/em&gt;(6671), 75&amp;ndash;78.
&lt;a class="link" href="https://doi.org/10.1038/32164" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/32164&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-haissaguerre1998spontaneous" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Haissaguerre, M., Jais, P., Shah, D., Takahashi, A., Hocini, M.,
Quiniou, G., Garrigue, S., Le Mouroux, A., P, L. M., &amp;amp; J, C. (1998).
Spontaneous initiation of atrial fibrillation by ectopic beats
originating in the pulmonary veins. &lt;em&gt;New England Journal of Medicine&lt;/em&gt;,
&lt;em&gt;339&lt;/em&gt;, 659&amp;ndash;666. &lt;a class="link" href="https://doi.org/10.1056/nejm199809033391003" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1056/nejm199809033391003&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-harlaar2022hiam" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Harlaar, N., Dekker, S. O., Zhang, J., Snabel, R. R., Veldkamp, M. W.,
Verkerk, A. O., Fabres, C. C., Schwach, V., Lerink, L. J. S., Rivaud, M.
R., Mulder, A. A., Corver, W. E., Goumans, M. J. T. H., Dobrev, D.,
Klautz, R. J. M., Schalij, M. J., Veenstra, G. J. C., Passier, R.,
Brakel, T. J. van, Pijnappels, D. A., &amp;amp; Vries, A. A. F. de. (2022).
Conditional immortalization of human atrial myocytes for the generation
of in vitro models of atrial fibrillation. &lt;em&gt;Nature Biomedical
Engineering&lt;/em&gt;, &lt;em&gt;6&lt;/em&gt;(4), 389&amp;ndash;402.
&lt;a class="link" href="https://doi.org/10.1038/s41551-021-00827-5" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41551-021-00827-5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-numpy" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Harris, C. R., Millman, K. J., Walt, S. J. van der, Gommers, R.,
Virtanen, P., Cournapeau, D., Wieser, E., Taylor, J., Berg, S., Smith,
N. J., Kern, R., Picus, M., Hoyer, S., Kerkwijk, M. H. van, Brett, M.,
Haldane, A., Río, J. F. del, Wiebe, M., Peterson, P., Gérard-Marchant,
P., Sheppard, K., Reddy, T., Weckesser, W., Abbasi, H., Gohlke, C., &amp;amp;
Oliphant, T. E. (2020). Array programming with
&lt;span &gt;NumPy&lt;/span&gt;. &lt;em&gt;Nature&lt;/em&gt;,
&lt;em&gt;585&lt;/em&gt;(7825), 357&amp;ndash;362. &lt;a class="link" href="https://doi.org/10.1038/s41586-020-2649-2" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41586-020-2649-2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-heckert2002handbook" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Heckert, N. A., Filliben, J. J., Croarkin, C. M., Hembree, B., Guthrie,
W. F., Tobias, P., &amp;amp; Prinz, J. (2002). &lt;em&gt;Handbook 151:
&lt;span &gt;NIST/SEMATECH&lt;/span&gt;
e-handbook of statistical methods&lt;/em&gt;. &lt;a class="link" href="https://doi.org/10.18434/M32189" target="_blank" rel="noopener"
 &gt;https://doi.org/10.18434/M32189&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-hill2021introduction" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hill, C. L., &amp;amp; Stephens, G. J. (2021). An introduction to patch clamp
recording. &lt;em&gt;Patch Clamp Electrophysiology: Methods and Protocols&lt;/em&gt;,
1&amp;ndash;19. &lt;a class="link" href="https://doi.org/10.1007/978-1-0716-0818-0_1" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/978-1-0716-0818-0_1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-hochreiter1991untersuchungen" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hochreiter, S. (1991). Untersuchungen zu dynamischen neuronalen
&lt;span &gt;Netzen&lt;/span&gt;. &lt;em&gt;Diploma,
Technische
Universit&lt;span &gt;ä&lt;/span&gt;t
M&lt;span &gt;ü&lt;/span&gt;nchen&lt;/em&gt;, &lt;em&gt;91&lt;/em&gt;(1),
31.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-hochreiter2001gradient" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hochreiter, S., Bengio, Y., Frasconi, P., Schmidhuber, J., et al.
(2001). &lt;em&gt;Gradient flow in recurrent nets: The difficulty of learning
long-term dependencies&lt;/em&gt;. A field guide to dynamical recurrent neural
networks. IEEE Press In.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-hodgkin1952quantitative" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hodgkin, A. L., &amp;amp; Huxley, A. F. (1952). A quantitative description of
membrane current and its application to conduction and excitation in
nerve. &lt;em&gt;The Journal of Physiology&lt;/em&gt;, &lt;em&gt;117&lt;/em&gt;(4), 500&amp;ndash;544.
&lt;a class="link" href="https://doi.org/10.1113/jphysiol.1952.sp004764" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1113/jphysiol.1952.sp004764&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-hornik1989multilayer" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hornik, K., Stinchcombe, M., &amp;amp; White, H. (1989). Multilayer feedforward
networks are universal approximators. &lt;em&gt;Neural Networks&lt;/em&gt;, &lt;em&gt;2&lt;/em&gt;(5),
359&amp;ndash;366. &lt;a class="link" href="https://doi.org/10.1016/0893-6080%2889%2990020-8" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0893-6080(89)90020-8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cpp23" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ISO. (2023). &lt;em&gt;ISO/IEC 14882:2023: Programming languages &amp;mdash;
&lt;span &gt;C++&lt;/span&gt;&lt;/em&gt; (Seventh, p.
2101). International Organization for Standardization.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-pybind11" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Jakob, W., Rhinelander, J., &amp;amp; Moldovan, D. (2017). &lt;em&gt;pybind11 &amp;ndash; seamless
operability between
&lt;span &gt;C++11&lt;/span&gt; and
&lt;span &gt;Python&lt;/span&gt;&lt;/em&gt;.
&lt;a class="link" href="https://github.com/pybind/pybind11" target="_blank" rel="noopener"
 &gt;https://github.com/pybind/pybind11&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2022numerical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Arno, L., Leenknegt, L., Panfilov, A. V., &amp;amp; Dierckx, H.
(2022). Numerical methods for the detection of phase defect structures
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;(7), 1&amp;ndash;31.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0271351" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0271351&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2024ithildin" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Cloet, M., Zemlin, C., Bernus, O., &amp;amp; Dierckx, H. (2024). The
&lt;span &gt;Ithildin&lt;/span&gt; library for
efficient numerical solution of anisotropic reaction-diffusion problems
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;19&lt;/em&gt;(9), 1&amp;ndash;26.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0303674" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0303674&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2024fast" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., De Coster, T., de Vries, A. A. F., Pijnappels, D. A., &amp;amp;
Dierckx, H. (2024). Fast creation of data-driven low-order predictive
cardiac tissue excitation models from recorded activation patterns.
&lt;em&gt;Computers in Biology and Medicine&lt;/em&gt;, &lt;em&gt;169&lt;/em&gt;, 107949.
&lt;a class="link" href="https://doi.org/10.1016/j.compbiomed.2024.107949" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.compbiomed.2024.107949&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kapral1995chemical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kapral, R., &amp;amp; Showalter, R. (1995). &lt;em&gt;Chemical waves and patterns&lt;/em&gt;.
Kluwer.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-karakikes2015human" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Karakikes, I., Ameen, M., Termglinchan, V., &amp;amp; Wu, J. C. (2015). Human
induced pluripotent stem cell&amp;ndash;derived cardiomyocytes: Insights into
molecular, cellular, and functional phenotypes. &lt;em&gt;Circulation Research&lt;/em&gt;,
&lt;em&gt;117&lt;/em&gt;(1), 80&amp;ndash;88. &lt;a class="link" href="https://doi.org/10.1161/circresaha.117.305365" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/circresaha.117.305365&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-karma1993spiral" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Karma, A. (1993). Spiral breakup in model equations of action potential
propagation in cardiac tissue. &lt;em&gt;Physical Review Letters&lt;/em&gt;, &lt;em&gt;71&lt;/em&gt;(7), 1103.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevLett.71.1103" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevLett.71.1103&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-karma1994electrical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Karma, A. (1994). Electrical alternans and spiral wave breakup in
cardiac tissue. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;4&lt;/em&gt;(3), 461&amp;ndash;472. &lt;a class="link" href="https://doi.org/10.1063/1.166024" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166024&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kazbanov2016effects" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kazbanov, I. V., Ten Tusscher, K. H., &amp;amp; Panfilov, A. V. (2016). Effects
of heterogeneous diffuse fibrosis on arrhythmia dynamics and mechanism.
&lt;em&gt;Scientific Reports&lt;/em&gt;, &lt;em&gt;6&lt;/em&gt;(1), 20835. &lt;a class="link" href="https://doi.org/10.1038/srep20835" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/srep20835&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-keener2004topology" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Keener, J. P. (2004). The topology of defibrillation. &lt;em&gt;Journal of
Theoretical Biology&lt;/em&gt;, &lt;em&gt;230&lt;/em&gt;(4), 459&amp;ndash;473.
&lt;a class="link" href="https://doi.org/10.1016/j.jtbi.2003.11.033" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jtbi.2003.11.033&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-koopsen2024virtual" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Koopsen, T., Gerrits, W., van Osta, N., van Loon, T., Wouters, P.,
Prinzen, F. W., Vernooy, K., Delhaas, T., Teske, A. J., Meine, M.,
Cramer, M. J., &amp;amp; Lumens, J. (2024). Virtual pacing of a patient&amp;rsquo;s
digital twin to predict left ventricular reverse remodelling after
cardiac resynchronization therapy. &lt;em&gt;Europace&lt;/em&gt;, &lt;em&gt;26&lt;/em&gt;(1), euae009.
&lt;a class="link" href="https://doi.org/10.1093/europace/euae009" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1093/europace/euae009&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-lechleiter1991spiral" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Lechleiter, J., Girard, S., Peralta, E., &amp;amp; Clapham, D. (1991). Spiral
calcium wave propagation and annihilation in xenopus laevis oocytes.
&lt;em&gt;Science&lt;/em&gt;, &lt;em&gt;252&lt;/em&gt;(5002), 123&amp;ndash;126.
&lt;a class="link" href="https://doi.org/10.1126/science.2011747" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1126/science.2011747&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-li1994convergence" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Li, N., Steiner, J., &amp;amp; Tang, S. (1994). Convergence and stability
analysis of an explicit finite difference method for 2-dimensional
reaction-diffusion equations. &lt;em&gt;The Journal of the Australian
Mathematical Society. Series B. Applied Mathematics&lt;/em&gt;, &lt;em&gt;36&lt;/em&gt;(2), 234&amp;ndash;241.
&lt;a class="link" href="https://doi.org/10.1017/S0334270000010377" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1017/S0334270000010377&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-loew1996potentiometric" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Loew, L. M. (1996). Potentiometric dyes: Imaging electrical activity of
cell membranes. &lt;em&gt;Pure and Applied Chemistry&lt;/em&gt;, &lt;em&gt;68&lt;/em&gt;(7), 1405&amp;ndash;1409.
&lt;a class="link" href="https://doi.org/10.1351/pac199668071405" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1351/pac199668071405&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-majumder2016model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Majumder, R., Jangsangthong, W., Feola, I., Ypey, D. L., Pijnappels, D.
A., &amp;amp; Panfilov, A. V. (2016). A mathematical model of neonatal rat
atrial monolayers with constitutively active acetylcholine-mediated k+
current. &lt;em&gt;PLoS Computational Biology&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(6), e1004946.
&lt;a class="link" href="https://doi.org/10.1371/journal.pcbi.1004946" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pcbi.1004946&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-marcotte2017dynamical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Marcotte, C. D., &amp;amp; Grigoriev, R. O. (2017). Dynamical mechanism of
atrial fibrillation: A topological approach. &lt;em&gt;Chaos: An
Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;27&lt;/em&gt;(9).
&lt;a class="link" href="https://doi.org/10.1063/1.5003259" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.5003259&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-herreromartin2022eppinns" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Martin, C. H., Oved, A., Chowdhury, R. A., Ullmann, E., Peters, N. S.,
Bharath, A. A., &amp;amp; Varela, M. (2022).
&lt;span &gt;EP&lt;/span&gt;-&lt;span &gt;PINNs&lt;/span&gt;:
Cardiac electrophysiology characterisation using physics-informed neural
networks. &lt;em&gt;Frontiers in Cardiovascular Medicine&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.3389/fcvm.2021.768419" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fcvm.2021.768419&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-mikhailov1994complex" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Mikhailov, A. S., Davydov, V., &amp;amp; Zykov, V. (1994). Complex dynamics of
spiral waves and motion of curves. &lt;em&gt;Physica D: Nonlinear Phenomena&lt;/em&gt;,
&lt;em&gt;70&lt;/em&gt;(1-2), 1&amp;ndash;39. &lt;a class="link" href="https://doi.org/10.1016/0167-2789%2894%2990054-X" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0167-2789(94)90054-X&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-mitchell1985numerical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Mitchell, A., &amp;amp; Bruch Jr, J. (1985). A numerical study of chaos in a
reaction-diffusion equation. &lt;em&gt;Numerical Methods for Partial Differential
Equations&lt;/em&gt;, &lt;em&gt;1&lt;/em&gt;(1), 13&amp;ndash;23. &lt;a class="link" href="https://doi.org/10.1002/num.1690010104" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1002/num.1690010104&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-mitchellschaeffer2003model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Mitchell, C. (2003). A two-current model for the dynamics of cardiac
membrane. &lt;em&gt;Bulletin of Mathematical Biology&lt;/em&gt;, &lt;em&gt;65&lt;/em&gt;(5), 767&amp;ndash;793.
&lt;a class="link" href="https://doi.org/10.1016/S0092-8240%2803%2900041-7" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/S0092-8240(03)00041-7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-nagumo1962active" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Nagumo, J., Arimoto, S., &amp;amp; Yoshizawa, S. (1962). An active pulse
transmission line simulating nerve axon. &lt;em&gt;Proceedings of the
&lt;span &gt;IRE&lt;/span&gt;&lt;/em&gt;, &lt;em&gt;50&lt;/em&gt;(10),
2061&amp;ndash;2070. &lt;a class="link" href="https://doi.org/10.1109/jrproc.1962.288235" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/jrproc.1962.288235&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-neu1993homogenization" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Neu, J. C., &amp;amp; Krassowska, W. (1993). Homogenization of syncytial
tissues. &lt;em&gt;Critical Reviews in Biomedical Engineering&lt;/em&gt;, &lt;em&gt;21&lt;/em&gt;(2),
137&amp;ndash;199.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cuda" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Nickolls, J., Buck, I., Garland, M., &amp;amp; Skadron, K. (2008). Scalable
parallel programming with cuda: Is cuda the parallel programming model
that application developers have been waiting for? &lt;em&gt;Queue&lt;/em&gt;, &lt;em&gt;6&lt;/em&gt;(2),
40&amp;ndash;53. &lt;a class="link" href="https://doi.org/10.1145/1365490.1365500" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1145/1365490.1365500&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-niederer2011verification" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Niederer, S. A., Kerfoot, E., Benson, A. P., Bernabeu, M. O., Bernus,
O., Bradley, C., Cherry, E. M., Clayton, R., Fenton, F. H., Garny, A.,
Heidenreich, E., Land, S., Maleckar, M., Pathmanathan, P., Plank, G.,
Rodríguez, J. F., Roy, I., Sachse, F. B., Seemann, G., Skavhaug, O., &amp;amp;
Smith, N. P. (2011). Verification of cardiac tissue electrophysiology
simulators using an
&lt;span class="nocase"&gt;N-version&lt;/span&gt;
benchmark. &lt;em&gt;Philosophical Transactions of the Royal Society A:
Mathematical, Physical and Engineering Sciences&lt;/em&gt;, &lt;em&gt;369&lt;/em&gt;(1954),
4331&amp;ndash;4351. &lt;a class="link" href="https://doi.org/10.1098/rsta.2011.0139" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1098/rsta.2011.0139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-niederer2019computational" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Niederer, S. A., Lumens, J., &amp;amp; Trayanova, N. A. (2019). Computational
models in cardiology. &lt;em&gt;Nature Reviews Cardiology&lt;/em&gt;, &lt;em&gt;16&lt;/em&gt;(2), 100&amp;ndash;111.
&lt;a class="link" href="https://doi.org/10.1038/s41569-018-0104-y" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41569-018-0104-y&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-nobelprize1963medicine" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Nobel Prize. (1963). &lt;em&gt;The
&lt;span &gt;Nobel&lt;/span&gt; prize in
physiology or medicine 1963&lt;/em&gt;.
&lt;a class="link" href="https://www.nobelprize.org/prizes/medicine/1963" target="_blank" rel="noopener"
 &gt;https://www.nobelprize.org/prizes/medicine/1963&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-paci2013model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Paci, M., Hyttinen, J., Aalto-Setälä, K., &amp;amp; Severi, S. (2013).
Computational models of ventricular-and atrial-like human induced
pluripotent stem cell derived cardiomyocytes. &lt;em&gt;Annals of Biomedical
Engineering&lt;/em&gt;, &lt;em&gt;41&lt;/em&gt;(11), 2334&amp;ndash;2348.
&lt;a class="link" href="https://doi.org/10.1007/s10439-013-0833-3" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/s10439-013-0833-3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-opencarp" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Plank, G., Loewe, A., Neic, A., Augustin, C., Huang, Y.-L., Gsell, M. A.
F., Karabelas, E., Nothstein, M., Prassl, A. J., Sánchez, J., Seemann,
G., &amp;amp; Vigmond, E. J. (2021). The
&lt;span class="nocase"&gt;openCARP&lt;/span&gt;
simulation environment for cardiac electrophysiology. &lt;em&gt;Computer Methods
and Programs in Biomedicine&lt;/em&gt;, &lt;em&gt;208&lt;/em&gt;, 106223.
&lt;a class="link" href="https://doi.org/10.1016/j.cmpb.2021.106223" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.cmpb.2021.106223&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-portero2024optoelectronic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Portero, V., Deng, S., Boink, G. J. J., Zhang, G. Q., de Vries, A. A.
F., &amp;amp; Pijnappels, D. A. (2024). Optoelectronic control of cardiac
rhythm: Toward shock-free ambulatory cardioversion of atrial
fibrillation. &lt;em&gt;Journal of Internal Medicine&lt;/em&gt;, &lt;em&gt;295&lt;/em&gt;(2), 126&amp;ndash;145.
&lt;a class="link" href="https://doi.org/10.1111/joim.13744" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1111/joim.13744&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-priebe1998simulation" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Priebe, L., &amp;amp; Beuckelmann, D. J. (1998). Simulation study of cellular
electric properties in heart failure. &lt;em&gt;Circulation Research&lt;/em&gt;, &lt;em&gt;82&lt;/em&gt;(11),
1206&amp;ndash;1223. &lt;a class="link" href="https://doi.org/10.1161/01.res.82.11.1206" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.res.82.11.1206&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-raissi2019physics" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Raissi, M., Perdikaris, P., &amp;amp; Karniadakis, G. E. (2019).
Physics-informed neural networks: A deep learning framework for solving
forward and inverse problems involving nonlinear partial differential
equations. &lt;em&gt;Journal of Computational Physics&lt;/em&gt;, &lt;em&gt;378&lt;/em&gt;, 686&amp;ndash;707.
&lt;a class="link" href="https://doi.org/10.1016/j.jcp.2018.10.045" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jcp.2018.10.045&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cbcbeat" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Rognes, M. E., Farrell, P. E., Funke, S. W., Hake, J. E., &amp;amp; Maleckar, M.
M. C. (2017). Cbcbeat: An adjoint-enabled framework for computational
cardiac electrophysiology. &lt;em&gt;The Journal of Open Source Software&lt;/em&gt;,
&lt;em&gt;2&lt;/em&gt;(13), 224. &lt;a class="link" href="https://doi.org/10.21105/joss.00224" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.00224&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-rotermund1990imaging" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Rotermund, H.-H., Engel, W., Kordesch, M., &amp;amp; Ertl, G. (1990). Imaging of
spatio-temporal pattern evolution during carbon monoxide oxidation on
platinum. &lt;em&gt;Nature&lt;/em&gt;, &lt;em&gt;343&lt;/em&gt;(6256), 355&amp;ndash;357.
&lt;a class="link" href="https://doi.org/10.1038/343355a0" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/343355a0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-rush1978practical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Rush, S., &amp;amp; Larsen, H. (1978). A practical algorithm for solving dynamic
membrane equations. &lt;em&gt;IEEE Transactions on Biomedical Engineering&lt;/em&gt;, &lt;em&gt;4&lt;/em&gt;,
389&amp;ndash;392. &lt;a class="link" href="https://doi.org/10.1109/TBME.1978.326270" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/TBME.1978.326270&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-schiebler2005anatomie" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Schiebler, T. H. (2005). &lt;em&gt;Anatomie: Histologie, entwicklungsgeschichte,
makroskopische und mikroskopische anatomie, topographie&lt;/em&gt;. Springer.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-shahi2022machine" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Shahi, S., Fenton, F. H., &amp;amp; Cherry, E. M. (2022). A machine-learning
approach for long-term prediction of experimental cardiac action
potential time series using an autoencoder and echo state networks.
&lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;32&lt;/em&gt;(6).
&lt;a class="link" href="https://doi.org/10.1063/5.0087812" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/5.0087812&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-opencl" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Stone, J. E., Gohara, D., &amp;amp; Shi, G. (2010). OpenCL: A parallel
programming standard for heterogeneous computing systems. &lt;em&gt;Computing in
Science &amp;amp; Engineering&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(3), 66&amp;ndash;73.
&lt;a class="link" href="https://doi.org/10.1109/MCSE.2010.69" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/MCSE.2010.69&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-temam1990inertial" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Temam, R. (1990). Inertial manifolds. &lt;em&gt;The Mathematical Intelligencer&lt;/em&gt;,
&lt;em&gt;12&lt;/em&gt;(4), 68&amp;ndash;74. &lt;a class="link" href="https://doi.org/10.1007/BF03024036" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/BF03024036&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-tentusscher2004model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ten Tusscher, K. H. W. J., Noble, D., Noble, P.-J., &amp;amp; Panfilov, A. V.
(2004). A model for human ventricular tissue. &lt;em&gt;American Journal of
Physiology-Heart and Circulatory Physiology&lt;/em&gt;, &lt;em&gt;286&lt;/em&gt;(4), H1573&amp;ndash;H1589.
&lt;a class="link" href="https://doi.org/10.1152/ajpheart.00794.2003" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.00794.2003&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-ten2006alternans" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ten Tusscher, K. H. W. J., &amp;amp; Panfilov, A. V. (2006). Alternans and
spiral breakup in a human ventricular tissue model. &lt;em&gt;American Journal of
Physiology-Heart and Circulatory Physiology&lt;/em&gt;, &lt;em&gt;291&lt;/em&gt;(3), H1088&amp;ndash;H1100.
&lt;a class="link" href="https://doi.org/10.1152/ajpheart.00109.2006" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.00109.2006&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-tomii2021spatial" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Tomii, N., Yamazaki, M., Ashihara, T., Nakazawa, K., Shibata, N., Honjo,
H., &amp;amp; Sakuma, I. (2021). Spatial phase discontinuity at the center of
moving cardiac spiral waves. &lt;em&gt;Computers in Biology and Medicine&lt;/em&gt;, &lt;em&gt;130&lt;/em&gt;,
104217. &lt;a class="link" href="https://doi.org/10.1016/j.compbiomed.2021.104217" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.compbiomed.2021.104217&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-toscano2024pinns" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Toscano, J. D., Oommen, V., Varghese, A. J., Zou, Z., Daryakenari, N.
A., Wu, C., &amp;amp; Karniadakis, G. E. (2024). From PINNs to PIKANs: Recent
advances in physics-informed machine learning. &lt;em&gt;arXiv Preprint
arXiv:2410.13228&lt;/em&gt;. &lt;a class="link" href="https://doi.org/10.48550/arXiv.2410.13228" target="_blank" rel="noopener"
 &gt;https://doi.org/10.48550/arXiv.2410.13228&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-trayanova2020how" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Trayanova, N. A., Doshi, A. N., &amp;amp; Prakosa, A. (2020). How personalized
heart modeling can help treatment of lethal arrhythmias:
&lt;span &gt;A&lt;/span&gt; focus on
ventricular tachycardia ablation strategies in post‐infarction patients.
&lt;em&gt;WIREs Systems Biology and Medicine&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(3).
&lt;a class="link" href="https://doi.org/10.1002/wsbm.1477" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1002/wsbm.1477&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-tung1978bidomain" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Tung, L. (1978). &lt;em&gt;A bi-domain model for describing ischemic myocardial
&lt;span &gt;DC&lt;/span&gt; currents&lt;/em&gt; [PhD
thesis]. MIT, Cambridge, MA.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-python" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;van Rossum, G., Drake, F. L., et al. (1995). &lt;em&gt;The
&lt;span &gt;Python&lt;/span&gt; programming
language&lt;/em&gt;. Centrum voor Wiskunde en Informatica Amsterdam.
&lt;a class="link" href="https://www.python.org" target="_blank" rel="noopener"
 &gt;https://www.python.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-van2016deep" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Van Valen, D. A., Kudo, T., Lane, K. M., Macklin, D. N., Quach, N. T.,
DeFelice, M. M., Maayan, I., Tanouchi, Y., Ashley, E. A., &amp;amp; Covert, M.
W. (2016). Deep learning automates the quantitative analysis of
individual cells in live-cell imaging experiments. &lt;em&gt;PLoS Computational
Biology&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(11), e1005177.
&lt;a class="link" href="https://doi.org/10.1371/journal.pcbi.1005177" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pcbi.1005177&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-scipy" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T.,
Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J.,
van der Walt, S. J., Brett, M., Wilson, J., Millman, K. J., Mayorov, N.,
Nelson, A. R. J., Jones, E., Kern, R., Larson, E., Carey, C. J., Polat,
İlhan, Feng, Y., Moore, E. W., VanderPlas, J., Laxalde, D., Perktold,
J., Cimrman, R., Henriksen, I., Quintero, E. A., Harris, C. R.,
Archibald, A. M., Ribeiro, A. H., Pedregosa, F., van Mulbregt, P., &amp;amp;
SciPy 1.0 Contributors. (2020).
&lt;span class="nocase"&gt;&lt;span &gt;SciPy&lt;/span&gt;
1.0: Fundamental Algorithms for Scientific Computing in
Python&lt;/span&gt;. &lt;em&gt;Nature Methods&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;, 261&amp;ndash;272.
&lt;a class="link" href="https://doi.org/10.1038/s41592-019-0686-2" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41592-019-0686-2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-weisrock2024myofinder" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Weisrock, A., Wüst, R., Olenic, M., Lecomte-Grosbras, P., &amp;amp; Thorrez, L.
(2024). &lt;span &gt;MyoFInDer&lt;/span&gt;:
An &lt;span &gt;AI&lt;/span&gt;-based tool for
myotube fusion index determination. &lt;em&gt;Tissue Engineering&lt;/em&gt;, &lt;em&gt;ja&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.1089/ten.tea.2024.0049" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1089/ten.tea.2024.0049&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-zipes2017cardiac" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Zipes, D. P., &amp;amp; Jalife, J. (2014). &lt;em&gt;Cardiac electrophysiology: From cell
to bedside&lt;/em&gt;. Elsevier.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;from the Greek word βραδύς (bradýs) for &amp;ldquo;slow&amp;rdquo;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;from the Greek word ταχύς (tachýs) for &amp;ldquo;fast&amp;rdquo;&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;The term &lt;em&gt;artificial intelligence&lt;/em&gt; (AI) is much more vague. Not
just machine-learned functions, but, in the most broad sense, any
computer algorithm that seems in some sense &amp;ldquo;intelligent&amp;rdquo; can be
called AI. For instance, allegedly, the bot of
&lt;a class="link" href="https://www.reddit.com/r/wallstreetbets/comments/13tm59d/comment/jlw5ozq/" target="_blank" rel="noopener"
 &gt;Reddit&lt;/a&gt;
user &lt;code&gt;u/versaceblues&lt;/code&gt; won their university&amp;rsquo;s AI poker competition
with the algorithm &lt;code&gt;if isMyTurn: goAllIn()&lt;/code&gt;, to which all other bots
folded. In recent years, AI has become an overused buzzword that is
used essentially interchangeably with the word &amp;ldquo;algorithm&amp;rdquo;,
&amp;ldquo;program&amp;rdquo;, or even &amp;ldquo;mathematics&amp;rdquo;. We refrain from using the term AI,
as it is too vague, and instead prefer to use more precise terms,
such as machine learning, where applicable.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Calendar of travel photos 2024</title><link>https://kabus.eu/2024/12/04/calendar/</link><pubDate>Wed, 04 Dec 2024 20:48:09 +0100</pubDate><guid>https://kabus.eu/2024/12/04/calendar/</guid><description>&lt;img src="https://kabus.eu/2024/12/04/calendar/00.jpg" alt="Featured image of post Calendar of travel photos 2024" /&gt;&lt;p&gt;&lt;strong&gt;Cover photo:&lt;/strong&gt; 東京スカイツリー, 日本国 (Sky Tree, Tokyo, Japan)&lt;/p&gt;
&lt;p&gt;&lt;img alt="Palmižana, Sveti Klement, Hrvatska" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/01.jpg" srcset="https://kabus.eu/2024/12/04/calendar/01_hu_39d8e7e9c5c1920a.jpg 800w, https://kabus.eu/2024/12/04/calendar/01_hu_78bf64cc333628b5.jpg 1600w, https://kabus.eu/2024/12/04/calendar/01_hu_35a233dac1bf97a2.jpg 2400w, https://kabus.eu/2024/12/04/calendar/01.jpg 3000w" width="3000"&gt;
&lt;img alt="Brugge, Vlaanderen, België" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="2157" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/02.jpg" srcset="https://kabus.eu/2024/12/04/calendar/02_hu_122d9a51d254dc0a.jpg 800w, https://kabus.eu/2024/12/04/calendar/02_hu_6ba9baf07f84744d.jpg 1600w, https://kabus.eu/2024/12/04/calendar/02.jpg 2157w" width="2157"&gt;
&lt;img alt="Gent, Vlaanderen, België" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="2996" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/03.jpg" srcset="https://kabus.eu/2024/12/04/calendar/03_hu_be0673fb0364c33.jpg 800w, https://kabus.eu/2024/12/04/calendar/03_hu_dfa231edf1c37b30.jpg 1600w, https://kabus.eu/2024/12/04/calendar/03_hu_b8aaac07a0aefac5.jpg 2400w, https://kabus.eu/2024/12/04/calendar/03.jpg 2996w" width="2996"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Primošten, Šibenik-Knin, Hrvatska" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/04.jpg" srcset="https://kabus.eu/2024/12/04/calendar/04_hu_f5f28995e8ddf802.jpg 800w, https://kabus.eu/2024/12/04/calendar/04_hu_629bd37f3a5b6cea.jpg 1600w, https://kabus.eu/2024/12/04/calendar/04.jpg 2160w" width="2160"&gt;
&lt;img alt="東京スカイツリー, 日本国 (Sky Tree, Tokyo, Japan)" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/05.jpg" srcset="https://kabus.eu/2024/12/04/calendar/05_hu_a561980804f969e7.jpg 800w, https://kabus.eu/2024/12/04/calendar/05.jpg 1200w" width="1200"&gt;
&lt;img alt="八色, 南魚沼市, 日本国 (Yairo, Minamiuonuma, Japan)" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="1199" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/06.jpg" srcset="https://kabus.eu/2024/12/04/calendar/06_hu_30141e98af56ace0.jpg 800w, https://kabus.eu/2024/12/04/calendar/06.jpg 1199w" width="1199"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Katwijk, Zuid-Holland, Nederland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="2996" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/07.jpg" srcset="https://kabus.eu/2024/12/04/calendar/07_hu_bd4a4f535a0531f3.jpg 800w, https://kabus.eu/2024/12/04/calendar/07_hu_4e1c35a8b60a5d58.jpg 1600w, https://kabus.eu/2024/12/04/calendar/07_hu_6f445317ac679ab6.jpg 2400w, https://kabus.eu/2024/12/04/calendar/07.jpg 2996w" width="2996"&gt;
&lt;img alt="Helsinki, Uusimaa, Suomi" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/08.jpg" srcset="https://kabus.eu/2024/12/04/calendar/08_hu_c193e3bb8860f01f.jpg 800w, https://kabus.eu/2024/12/04/calendar/08_hu_730880be3268f02c.jpg 1600w, https://kabus.eu/2024/12/04/calendar/08_hu_4d37bc9bc7e1cd04.jpg 2400w, https://kabus.eu/2024/12/04/calendar/08.jpg 3000w" width="3000"&gt;
&lt;img alt="Leiden, Zuid-Holland, Nederland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="2960" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/09.jpg" srcset="https://kabus.eu/2024/12/04/calendar/09_hu_e4b12b44c53eab32.jpg 800w, https://kabus.eu/2024/12/04/calendar/09_hu_19c8e1dc531b2889.jpg 1600w, https://kabus.eu/2024/12/04/calendar/09_hu_e4427f6c0d8db635.jpg 2400w, https://kabus.eu/2024/12/04/calendar/09.jpg 2960w" width="2960"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Casa Batlló, Barcelona, España" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="3000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/10.jpg" srcset="https://kabus.eu/2024/12/04/calendar/10_hu_1dd422542666472e.jpg 800w, https://kabus.eu/2024/12/04/calendar/10_hu_e0e5817924e47f8.jpg 1600w, https://kabus.eu/2024/12/04/calendar/10_hu_f19c43e5367f2ff.jpg 2400w, https://kabus.eu/2024/12/04/calendar/10.jpg 3000w" width="3000"&gt;
&lt;img alt="’s-Gravenhage, Zuid-Holland, Nederland" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="2402" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/11.jpg" srcset="https://kabus.eu/2024/12/04/calendar/11_hu_b16ec0c301798c48.jpg 800w, https://kabus.eu/2024/12/04/calendar/11_hu_3a3432193d19ca89.jpg 1600w, https://kabus.eu/2024/12/04/calendar/11_hu_78ca2a7f7de4f5ae.jpg 2400w, https://kabus.eu/2024/12/04/calendar/11.jpg 2402w" width="2402"&gt;
&lt;img alt="Espoo, Uusimaa, Suomi" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/12/04/calendar/12.jpg" srcset="https://kabus.eu/2024/12/04/calendar/12_hu_e07cd69b74f12eac.jpg 800w, https://kabus.eu/2024/12/04/calendar/12_hu_78e7fa3abceecdbf.jpg 1600w, https://kabus.eu/2024/12/04/calendar/12.jpg 2160w" width="2160"&gt;&lt;/p&gt;</description></item><item><title>Analysis of complex excitation patterns using Feynman-like diagrams</title><link>https://kabus.eu/2024/11/22/arno2024feynman/</link><pubDate>Fri, 22 Nov 2024 00:00:00 +0000</pubDate><guid>https://kabus.eu/2024/11/22/arno2024feynman/</guid><description>&lt;img src="https://kabus.eu/2024/11/22/arno2024feynman/header.svg" alt="Featured image of post Analysis of complex excitation patterns using Feynman-like diagrams
" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;This article was previously published in &lt;em&gt;Scientific Reports&lt;/em&gt; &lt;strong&gt;14&lt;/strong&gt;,
28962 (2024). (&lt;a class="link" href="#ref-arno2024feynman" &gt;Arno et al., 2024a&lt;/a&gt;) and is a
chapter of my
&lt;a class="link" href="https://kabus.eu/diss" &gt;dissertation&lt;/a&gt;.
The full thesis is available online as a
&lt;a class="link" href="https://dkabus.gitlab.io/thesis-phd/kabus2025dissertation.pdf" target="_blank" rel="noopener"
 &gt;PDF&lt;/a&gt; or
can be read &lt;a class="link" href="https://kabus.eu/diss" &gt;chapter by chapter on this website&lt;/a&gt;.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Louise Arno&lt;sup&gt;1,3&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0001-9384-519X" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0001-9384-519X&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Desmond Kabus&lt;sup&gt;1,2,3&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0002-6965-5211" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0002-6965-5211&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hans Dierckx&lt;sup&gt;1&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0003-0899-8082" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0003-0899-8082&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Institutions:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Department of Mathematics, KU Leuven Campus Kortrijk (KULAK), Etienne Sabbelaan 53, 8500 Kortrijk, Belgium&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Laboratory of Experimental Cardiology, Leiden University Medical Center (LUMC), Albinusdreef 2, 2333 ZA Leiden, The Netherlands&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;iSi Health, Institute of Physics-based Modeling for In Silico Health, KU Leuven, Oude Markt 13, 3000 Leuven, Belgium&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Correspondence:&lt;/strong&gt; &lt;a class="link" href="mailto:dr.h.dierckx@gmail.com" &gt;dr.h.dierckx@gmail.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DOI:&lt;/strong&gt;
&lt;a class="link" href="https://doi.org/10.1038/s41598-024-73544-z" target="_blank" rel="noopener"
 &gt;10.1038/s41598-024-73544-z&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Many extended chemical and biological systems self-organise into complex
patterns that drive the medium behaviour in a non-linear fashion. An
important class of such systems are excitable media, including neural
and cardiac tissues. In extended excitable media, wave breaks can form
rotating patterns and turbulence. However, the onset, sustaining and
elimination of such complex patterns is currently incompletely
understood. The classical theory of phase singularities in excitable
media was recently challenged, as extended lines of conduction block
were identified as phase discontinuities. Here, we provide a theoretical
framework that captures the rich dynamics in excitable systems in terms
of three quasiparticles: heads, tails, and pivots. We propose to call
these quasiparticles &amp;lsquo;cardions&amp;rsquo;. In simulations and experiments, we show
that these basic building blocks combine into at least four different
bound states. By representing their interactions similarly to Feynman
diagrams in physics, the creation and annihilation of vortex pairs are
shown to be sequences of dynamical creation, annihilation, and
recombination of the identified quasiparticles. We draw such diagrams
for numerical simulations, as well as optical voltage mapping
experiments performed on cultured human atrial myocytes (hiAMs). Our
results provide a new, unified language for a more detailed theory,
analysis, and mechanistic insights of dynamical transitions in
excitation patterns.&lt;/p&gt;
&lt;div id="sec:feynman:introduction"&gt;
&lt;h1 id="introduction"&gt;Introduction
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Some of the most intriguing waves and patterns in nature arise from the
spatial coupling between excitable elements. Examples include the
emergence of intelligence in neural tissue (&lt;a class="link" href="#ref-cannon2014neurosystems" &gt;Cannon et al.,
2014&lt;/a&gt;), epidemic spread across a population
(&lt;a class="link" href="#ref-smith2002predicting" &gt;Smith et al., 2002&lt;/a&gt;), intracellular waves
(&lt;a class="link" href="#ref-lechleiter1991spiral" &gt;Lechleiter et al., 1991&lt;/a&gt;), chemical
oxidation waves (&lt;a class="link" href="#ref-kapral1995chemical" &gt;Kapral &amp;amp; Showalter, 1995&lt;/a&gt;;
&lt;a class="link" href="#ref-rotermund1990imaging" &gt;Rotermund et al., 1990&lt;/a&gt;) and the emergence
of cardiac arrhythmias in the heart muscle (&lt;a class="link" href="#ref-allessie1973circus" &gt;Allessie et al.,
1973&lt;/a&gt;; &lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al.,
1998&lt;/a&gt;). Our work was motivated by the case of
heart rhythm disorders, that had a global mortality rate of in 2019,
with increasing numbers every year. Hence, cardiac arrhythmias remain
one of the largest causes of death worldwide (&lt;a class="link" href="#ref-who2020top" &gt;WHO,
2020&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;While the local excitation dynamics can be measured and modelled, a firm
theoretical description at the mesoscale is still lacking. Hence, much
effort is currently invested in numerical modelling (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;) and machine learning approaches
(&lt;a class="link" href="#ref-trayanova2021machine" &gt;Trayanova et al., 2021&lt;/a&gt;). Our aim is to
complement such approaches with semi-analytical methods that give more
insight in why patterns develop over time in a certain manner.&lt;/p&gt;
&lt;p&gt;In this paper, we revise the classical mesoscale theory of excitation
that has been used for cardiac arrhythmia analysis over the past decades
(&lt;a class="link" href="#ref-christoph2018electromechanical" &gt;Christoph et al., 2018&lt;/a&gt;; &lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton
et al., 2006&lt;/a&gt;; &lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;; &lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al.,
1998&lt;/a&gt;). Similar to historical developments in
particle physics, we coin that the classical phase singularities in
excitation are formed of more elementary quasiparticles. While this
finer structure remains hidden in simple dynamical regimes, we show
below in simulation and experiment that it becomes relevant during the
processes of wave block, vortex initiation and recombination. Such
insight is relevant for excitation patterns, since precisely those
events need to be thoroughly understood if one wants to predict or
control the emergent dynamics in those systems. A graphical outline of
the analysis method presented in this paper can be found in
Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:feynman:intro"&gt;
&lt;p&gt;&lt;img alt="Conceptual framework for the analysis of excitation patterns using quasiparticles and Feynman-like diagrams" class="gallery-image" data-flex-basis="555px" data-flex-grow="231" height="875" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/flowchart.png" srcset="https://kabus.eu/2024/11/22/arno2024feynman/figures/flowchart_hu_d451946cb1dab1fd.png 800w, https://kabus.eu/2024/11/22/arno2024feynman/figures/flowchart_hu_9b4ec760492cac00.png 1600w, https://kabus.eu/2024/11/22/arno2024feynman/figures/flowchart.png 2025w" width="2025"&gt;&lt;/p&gt;
&lt;p&gt;Figure 1: &lt;strong&gt;Conceptual framework for the analysis of excitation patterns
using quasiparticles and Feynman-like diagrams.&lt;/strong&gt; &lt;strong&gt;A.&lt;/strong&gt; A linear-core
spiral wave (&lt;a class="link" href="#ref-bueno2008model" &gt;Bueno-Orovio et al., 2008&lt;/a&gt;) in a
numerical simulation on a human biventricular geometry, see the Methods
section below. &lt;strong&gt;B.&lt;/strong&gt; Numerical simulation (&lt;a class="link" href="#ref-bueno2008model" &gt;Bueno-Orovio et al.,
2008&lt;/a&gt;) in a two-dimensional domain, which could
represent a pattern on the outer surface of the heart or in a cell
culture. &lt;strong&gt;C.&lt;/strong&gt; The linear phase based on local activation time (LAT)
Eq. &lt;a class="link" href="#eq:feynman:phi:lin" &gt;3&lt;/a&gt;. &lt;strong&gt;D.&lt;/strong&gt; Spatial analysis of the observed
pattern, showing excited ($\mathrm{E}$, yellow) and
unexcited ($\mathrm{U}$, white) regions. They are
separated by the wave fronts ($\mathrm{F}$, cyan),
wave backs ($\mathrm{B}$, magenta), and phase defect
lines ($\mathrm{Z}$, gray). The end points of these
three different curves are topologically preserved as quasiparticles:
heads (h, blue), tails (t, red), and pivots (p, green). &lt;strong&gt;E.&lt;/strong&gt; Top:
Depending on the orientation, we assign positive or negative charges
$Q=\pm \frac{1}{2}$ to heads and tails, and charges
$P = \pm
 \frac{1}{2}$ to pivots. Bottom: Several
combinations of head, tail, and pivot are seen to travel together
through the medium, akin to bound states in particle physics: the
classical tip ($\mathrm{f} = \mathrm{h}+\mathrm{t}$),
the spiral core
($\mathrm{c} = \mathrm{h}+\mathrm{t}+2\mathrm{p}$),
and the newly identified phase defect growth sites
($\mathrm{g}=\mathrm{h}+\mathrm{t}+\mathrm{p}$), and
shrinking sites ($\mathrm{s}=\mathrm{t}+\mathrm{p}$)
seen during arrhythmogenesis. For an overview of all quantities, see
Table &lt;a class="link" href="#tbl:feynman:particles" &gt;1&lt;/a&gt;. &lt;strong&gt;F.&lt;/strong&gt; We propose to keep track of
the recombinations of building blocks over time using Feynman-like
diagrams.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="tbl:feynman:particles"&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;particle&lt;/th&gt;
 &lt;th style="text-align: left"&gt;notation&lt;/th&gt;
 &lt;th style="text-align: left"&gt;simplified notation&lt;/th&gt;
 &lt;th style="text-align: left"&gt;charge $Q$&lt;/th&gt;
 &lt;th style="text-align: left"&gt;charge $P$&lt;/th&gt;
 &lt;th style="text-align: left"&gt;composition&lt;/th&gt;
 &lt;th style="text-align: center"&gt;colour code&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;head&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{h}^{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{h}^{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\pm\frac{1}{2}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;0&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;img alt="h" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/particles/h.svg"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;tail&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{t}^{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{t}^{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\pm\frac{1}{2}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;0&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;img alt="t" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/particles/t.svg"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;pivot&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{p}_{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{p}^{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$0$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\pm\frac{1}{2}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;img alt="p" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/particles/p.svg"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;filament; tip&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{f}^{\pm\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{f}^{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\pm 1$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$0$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;h$^\pm$ + t$^\pm$&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;img alt="f" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/particles/f.svg"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;core; phase singularity&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{c}^{\pm\pm}_{\pm\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{c}^{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\pm 1$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\pm 1$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;h$^\pm$ + t$^\pm$ + 2p$_\pm$&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;img alt="c" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/particles/c.svg"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;shrink site&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{s}^{\pm}_{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{s}^{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\pm\frac{1}{2}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\pm\frac{1}{2}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;p$_\pm$ + t$^\pm$&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;img alt="s" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/particles/s.svg"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;growth site&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{g}^{\pm\pm}_{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\mathrm{g}^{\pm}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\pm 1$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;$\pm\frac{1}{2}$&lt;/td&gt;
 &lt;td style="text-align: left"&gt;h$^\pm$ + t$^\pm$ + p$_\pm$&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;img alt="g" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/particles/g.svg"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Table 1: &lt;strong&gt;Overview of quasiparticles (cardions) in excitable media&lt;/strong&gt;,
together with their charges, notation, composition, and colour code. In
the extended notation, superscript denotes the head/tail charge
$Q$ in units of $\frac{1}{2}$ and
subscripts denote the pivot charge $P$. As only
quasiparticles of the same charge bind, the simplified notation
indicates this with a single superscript $\pm$. The
list is non-exhaustive and reflects our current knowledge.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;As we illustrate our general theoretical framework below with an
analysis of experiments performed on cultured human heart cells
(&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al., 2022&lt;/a&gt;), we now describe the
current state-of-art and associated challenges in the description and
understanding of cardiac excitation patterns.&lt;/p&gt;
&lt;p&gt;The mechanical contraction of each myocyte in the heart is triggered by
electrical depolarisation of the cells, which first propagates through a
dedicated conduction system, but is thereafter passed on from
cardiomyocyte to cardiomyocyte. As a result, the activation wave can
re-excite itself, or a local focal source can start extra excitations.
Such abnormal emerging behaviour manifests as a cardiac arrhythmia.&lt;/p&gt;
&lt;p&gt;A simple arrhythmia in which the excitation wave follows a fixed path in
time, or which originates from a region of ectopic impulse formation can
be treated by ablation therapy, in which the trigger or path is
physically destroyed (&lt;a class="link" href="#ref-haissaguerre1998spontaneous" &gt;Haissaguerre et al.,
1998&lt;/a&gt;). Even though efficiency has
improved significantly throughout the years, the success rate is rather
low for arrhythmias with incompletely understood spatiotemporal
organisation (&lt;a class="link" href="#ref-cronin20192019" &gt;Cronin et al., 2019&lt;/a&gt;; &lt;a class="link" href="#ref-mujovi-c2017catheter" &gt;Mujović et
al., 2017&lt;/a&gt;). Such arrhythmias include
ventricular fibrillation (&lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al., 1998&lt;/a&gt;;
&lt;a class="link" href="#ref-jalife1998self" &gt;Jalife et al., 1998&lt;/a&gt;), which is the most lethal
one, and atrial fibrillation, which affects approximately of the world
population, and is responsible for one third of stroke cases (&lt;a class="link" href="#ref-samol2016atrial" &gt;Samol et
al., 2016&lt;/a&gt;). In both atrial and ventricular
fibrillation, as well as in ventricular tachycardia, rotating vortices
of activation have been observed (&lt;a class="link" href="#ref-allessie1973circus" &gt;Allessie et al.,
1973&lt;/a&gt;), named spiral waves, scroll waves, or
cardiac rotors. While computer simulations of the heart (&lt;a class="link" href="#ref-gray1995mechanisms" &gt;Gray et al.,
1995&lt;/a&gt;) and initial observations (&lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al.,
1998&lt;/a&gt;) often yield long-lived stable rotors,
complex patterns detected in real hearts commonly show a more complex
regime that exhibits conduction blocks and transient rotors which do not
even complete a full turn. There is a consensus that interacting wave
fragments, also called wavelets (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;; &lt;a class="link" href="#ref-lee2020reconsidering" &gt;Lee et al.,
2020&lt;/a&gt;; &lt;a class="link" href="#ref-moe1959atrial" &gt;Moe &amp;amp; Abildskov,
1959&lt;/a&gt;) play a role in atrial and ventricular
fibrillation. However, the precise mechanisms of onset, sustainment, and
termination of complex arrhythmias remain to be further elucidated
(&lt;a class="link" href="#ref-aras2017ventricular" &gt;Aras et al., 2017&lt;/a&gt;; &lt;a class="link" href="#ref-shibata2022mechanism" &gt;Shibata et al.,
2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We now review the concepts of phase and phase singularities that are
used to describe excitable media. Winfree
(&lt;a class="link" href="#ref-winfree1973scroll" &gt;1973&lt;/a&gt;) already noted that many biological
processes are cyclic in nature, and therefore could be described
naturally by a &amp;lsquo;phase&amp;rsquo;. Near the centre of a rotating spiral wave, phase
singularities may occur (&lt;a class="link" href="#ref-winfree1983singular" &gt;Winfree &amp;amp; Strogatz,
1983&lt;/a&gt;), which form filament curves in three
dimensions. Given two observed variables $V$ and
$R$ that depend on the position
${{\bm{{r}}}}$ and time $t$ in a
spatiotemporal pattern, it is common to call the polar angle in the
state space spanned by $V$ and $R$
the &amp;lsquo;phase of activation&amp;rsquo;:
&lt;span id="eq:feynman:phi:act"&gt;$$\begin{aligned}
 \varphi({{\bm{{r}}}},t) &amp;= \operatorname{atan2}( R({{\bm{{r}}}},t) - R_*, V({{\bm{{r}}}},t) - V_*)
\end{aligned}\qquad{(1)}$$&lt;/span&gt; Here,
$\operatorname{atan2}$ is the two-argument
arc-tangent function, delivering values in
$(-\pi,\pi]$. In a seminal work, Gray et al.
(&lt;a class="link" href="#ref-gray1998spatial" &gt;1998&lt;/a&gt;) analysed ventricular fibrillation
patterns in this manner (&lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al., 1998&lt;/a&gt;),
with $V({{\bm{{r}}}},t)$ the optical intensity
representing normalised transmembrane potential, and
$R({{\bm{{r}}}},t) = V({{\bm{{r}}}},t+\tau_0)$ its
time-delayed version. The main idea here is that points that differ in
phase by an integer multiple of $2\pi$ are
effectively in the same state. After spatial filtering of the signal,
distinct points occurred where all phases meet, called phase
singularities (&lt;a class="link" href="#ref-winfree1983singular" &gt;Winfree &amp;amp; Strogatz, 1983&lt;/a&gt;).
Since then, analysis tools (&lt;a class="link" href="#ref-bray2003examination" &gt;Bray &amp;amp; Wikswo,
2003&lt;/a&gt;; &lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al.,
1998&lt;/a&gt;), ablation strategies (&lt;a class="link" href="#ref-narayan2012treatment" &gt;Narayan et al.,
2012&lt;/a&gt;), and mathematical theory (&lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et
al., 2006&lt;/a&gt;; &lt;a class="link" href="#ref-panfilov2017theory" &gt;Panfilov &amp;amp; Dierckx,
2017&lt;/a&gt;) have been developed based on the assumed
existence of phase singularities during arrhythmias. A phase singularity
can also be regarded as the intersection of two contour lines of two
different state variables, which also allows to locate them numerically
(&lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma, 1998&lt;/a&gt;). An extension of this
topological approach that focuses on the dynamical transitions between
the contour intersections was described by Marcotte &amp;amp; Grigoriev
(&lt;a class="link" href="#ref-marcotte2017dynamical" &gt;2017&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Characterising excitable media in terms of phase singularities was
pioneered based on observations in oscillating chemical reactions
(&lt;a class="link" href="#ref-winfree1973scroll" &gt;Winfree, 1973&lt;/a&gt;; &lt;a class="link" href="#ref-zhabotinsky1973autowave" &gt;Zhabotinsky &amp;amp; Zaikin,
1973&lt;/a&gt;). When a phase singularity is
tracked in computational models of cardiac excitation (&lt;a class="link" href="#ref-fenton2008models" &gt;Fenton &amp;amp; Cherry,
2008&lt;/a&gt;), however, it is often seen to follow a
star-like or zig-zag pattern (&lt;a class="link" href="#ref-krinsky1992vortices" &gt;Krinsky et al.,
1992&lt;/a&gt;). Such a &amp;rsquo;linear rotor core&amp;rsquo; also occurs
at the interface between regions with different action potential
duration, where it was historically called a &amp;lsquo;reverbator&amp;rsquo; (&lt;a class="link" href="#ref-krinsky1966spread" &gt;Krinsky,
1966&lt;/a&gt;, &lt;a class="link" href="#ref-krinsky1968fibrillation" &gt;1968&lt;/a&gt;).
Linear core rotors have for decades escaped a thorough theoretical
description, in contrast to the better-behaved &amp;lsquo;rigidly rotating
rotors&amp;rsquo;. The latter are now well understood in terms of response
function theory (&lt;a class="link" href="#ref-biktashev1994tension" &gt;Biktashev et al., 1994&lt;/a&gt;;
&lt;a class="link" href="#ref-henry2000linear" &gt;Henry &amp;amp; Hakim, 2000&lt;/a&gt;; &lt;a class="link" href="#ref-keener1988dynamics" &gt;Keener,
1988&lt;/a&gt;; &lt;a class="link" href="#ref-verschelde2007covariant" &gt;Verschelde et al.,
2007&lt;/a&gt;), which enables to forecast their
motion if they are long-lived and weakly interacting with other rotors,
boundaries or inhomogeneities. However, in arrhythmia management, the
key processes to control are the transient processes causing the &amp;lsquo;birth&amp;rsquo;
of rotors from wave breaks during arrhythmogenesis, and the elimination
of rotors under pharmacological treatment, scarification of the medium,
or by mutual collisions. Even worse, atrial and ventricular fibrillation
are characterised by an incessant interaction between short-lived
wavebreaks, for which a theory is hitherto largely lacking.&lt;/p&gt;
&lt;p&gt;In recent years, it was suggested independently by Tomii et al.
(&lt;a class="link" href="#ref-tomii2021spatial" &gt;2021&lt;/a&gt;) and Arno et al.
(&lt;a class="link" href="#ref-arno2021phase" &gt;2021&lt;/a&gt;) that the classical phase singularity
concept may not be an accurate description for the structure of a linear
rotor core. Here, the zig-zag pattern emerges since the classical spiral
wave tip, i.e., the end point of the wave front, is moving along the
border of a region that has not yet recovered from the previous
activation. As soon as this region recovers, the spiral wave tip turns
over about in a so-called pivot point and then travels in the opposite
direction, after which this process is repeated. The mentioned authors
(&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al.,
2021&lt;/a&gt;) remarked that the parts of the medium at
both sides of the linear rotor core have a different phase, as these
regions were excited at different times. Hence, Tomii et al.
(&lt;a class="link" href="#ref-tomii2021spatial" &gt;2021&lt;/a&gt;) coined that across the conduction block
line at the centre of a linear-core rotor, there is a phase
discontinuity. We also noted this (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;), but remarked that due to electrotonic
effects, i.e., diffusion of transmembrane potential, a boundary layer of
finite width will be formed, across which the phase appears to change
rapidly in space. The situation is reminiscent of domain walls or other
interfaces in physics, and therefore we refer to them as &amp;lsquo;phase defects&amp;rsquo;
(&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;). The diffusive effect also
explains why the phase defects were not identified before: If you have a
line along which phase is discontinuous and smoothen the variables
slightly, the resulting phase function tends to become continuous except
in isolated points that happen to have the values
$V=V_*$, $R=R_*$, where all phases
meet. These points are exactly the phase singularities that have been
used in cardiac analysis for nearly three decades now (&lt;a class="link" href="#ref-gray1995mechanisms" &gt;Gray et al.,
1995&lt;/a&gt;). While many of these points will be true
phase singularities, a diffusive smoothing applied to a conduction block
may introduce pairs of false phase singularities, which in our opinion
explains the non-robust detection of phase singularity pairs in
conduction block regions (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;;
&lt;a class="link" href="#ref-rodrigo2017technical" &gt;Rodrigo et al., 2017&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The concept of a &amp;lsquo;phase defect&amp;rsquo; in excitable media is able to link
different objects already known in the field and will reveal new ones,
as can be seen below. From the explanation above, the phase defect can
represent a conduction block without a rotor attached to it, and the
conduction block that is present in a linear-core rotor. In hindsight,
Krinsky&amp;rsquo;s reverbators (&lt;a class="link" href="#ref-krinsky1966spread" &gt;Krinsky, 1966&lt;/a&gt;,
&lt;a class="link" href="#ref-krinsky1968fibrillation" &gt;1968&lt;/a&gt;) were also phase defects, as across
the interface, the phase was also discontinuous. Note that conduction
blocks are key features in activation maps (&lt;a class="link" href="#ref-janse1980flow" &gt;Janse et al.,
1980&lt;/a&gt;). In clinical acquisitions, it is common to
record the local activation times (LATs) and draw the isochrones. Where
different isochrones coincide, a conduction block and hence a phase
defect is present. This situation is similar to cartography, where
coincident isolines mark a cliff, i.e., a discontinuity in altitude.&lt;/p&gt;
&lt;p&gt;The aim of this paper is to provide a more detailed theoretical
framework that reconciles the concepts of wave fronts, wave backs,
conduction blocks, rotors with different core types, fragmented wave
fronts (wavelets) etc. The key concept will be the phase defect
mentioned above, and we will show that tracking how such phase defect is
connected to wave fronts and backs opens up new ways for pattern
analysis. Our exposition has been designed to unravel the critical
processes that cause, sustain or terminate complex arrhythmias. We
purposely use terminology from particle physics, as in this work we
bring several analogies from that discipline to a cardiac context.&lt;/p&gt;
&lt;div id="sec:feynman:concepts"&gt;
&lt;h1 id="conceptual-framework"&gt;Conceptual framework
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;We build up the framework by defining and motivating subsequently:
phase, phase defects, quasiparticles, charges and diagrams. A sketch
illustrating the main quantities in the following definitions can be
found in Fig. &lt;a class="link" href="#fig:feynman:concepts" &gt;2&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:feynman:concepts"&gt;
&lt;p&gt;&lt;img alt="Sketch illustrating the main quantities in the definitions for the topological framework on a linear-core rotor" class="gallery-image" data-flex-basis="547px" data-flex-grow="228" height="906" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/concepts.png" srcset="https://kabus.eu/2024/11/22/arno2024feynman/figures/concepts_hu_3eaf9e7685c1e982.png 800w, https://kabus.eu/2024/11/22/arno2024feynman/figures/concepts_hu_14a59660a76688df.png 1600w, https://kabus.eu/2024/11/22/arno2024feynman/figures/concepts.png 2067w" width="2067"&gt;&lt;/p&gt;
&lt;p&gt;Figure 2: &lt;strong&gt;Sketch illustrating the main quantities in the definitions
for the topological framework on a linear-core rotor.&lt;/strong&gt; Isochrones at
different LATs $t$ are used to define the phase
$\varphi$, which in turn is used to define the wave
front ($\mathrm{F}$) and back
($\mathrm{B}$). At the core of the vertex, the phase
$\varphi$ is discontinuous. The threshold
$\rho &gt; \rho_*$ of the phase defect density is used
to define the phase defect region $Z$. The angle
$\psi$ with the $x$-axis is the
direction of wave propagation.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:feynman:phase"&gt;&lt;/p&gt;
&lt;h2 id="phase"&gt;Phase
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Winfree wrote the following motivation to describe biological media with
a phase concept (&lt;a class="link" href="#ref-winfree1983singular" &gt;Winfree &amp;amp; Strogatz, 1983&lt;/a&gt;):
&amp;ldquo;After excitation, [the phase] initially grows linearly with time, but
after a while, it lingers near a value of $2\pi$,
which is equivalent to phase 0, the completely recovered state.&amp;rdquo; So,
when looking at an action potential as a function of time, we require
that $\varphi(t) = 0$ for $t&lt;0$
and $\varphi(t) = 2\pi$ for large
$t$. Phase definition Eq. &lt;a class="link" href="#eq:feynman:phi:act" &gt;1&lt;/a&gt; is
one possibility. It is certainly not unique, since different variables
$V$, $R$ can be chosen, as well as
their threshold values $V_*$,
$R_*$. Two other choices were given in by Kabus et
al. (&lt;a class="link" href="#ref-kabus2022numerical" &gt;2022&lt;/a&gt;), designed to exhibit no sharp
phase variation around the wave front.&lt;/p&gt;
&lt;p&gt;To make the link with isochrone maps, we here define the local
activation time (LAT) as the last time when the transmembrane potential
$V$ rose above a threshold value
$V_*$:
&lt;span &gt;$$\begin{aligned}
 t_\mathrm{LAT}({{\bm{{r}}}},t) = \operatorname{argmax}_{t_0 &lt; t} \{
 V({{\bm{{r}}}},t_0) = V_*
 \wedge
 \partial_t V({{\bm{{r}}}},t_0) &gt; 0
 \}
\end{aligned}\qquad{(2)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The elapsed time since last activation is then
$\tau = t - t_\mathrm{LAT}$. We now propose a linear
activation time-based phase:
&lt;span id="eq:feynman:phi:lin"&gt;$$\begin{aligned}
 \varphi({{\bm{{r}}}}, t) =
 \begin{cases}
 2\pi \frac{\tau({{\bm{{r}}}}, t)}{\tau_0} &amp; \tau({{\bm{{r}}}}, t) &lt; \tau_0 \\
 2 \pi &amp; \tau({{\bm{{r}}}}, t) \geq \tau_0
 \end{cases}
\end{aligned}\qquad{(3)}$$&lt;/span&gt; Hence,
the resting state has phase 0, and after activation phase grows linearly
with time over a time interval $\tau_0$, after which
the tissue is assumed to be fully recovered. Then the tissue has phase
$2\pi$, which is equivalent to phase
$0$. This simple phase has its limitations: It is
identical to zero at the foot of the upstroke, when
$V$ is still lower than $V_*$.
After a time interval $\tau_0$, that we choose equal
to the local action potential duration in that point, the medium is
assumed to be fully recovered. Still, it suffices for the formal
introduction of the concepts below.&lt;/p&gt;
&lt;div id="sec:feynman:phase:defects"&gt;
&lt;h2 id="phase-defects"&gt;Phase defects
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;By construction, $\varphi$ is continuous over a wave
front, since there the phase amounts to $0$. It is
also continuous over a wave back, where $\varphi$ is
slightly lower than $2\pi$. At conduction block
sites, however, the impeding wave does not make $V$
cross the threshold value $V_*$ from below anymore,
and hence $\varphi$ will be discontinuous across a
conduction block. As a consequence of the phase definition
Eq. &lt;a class="link" href="#eq:feynman:phi:lin" &gt;3&lt;/a&gt;, a true phase discontinuity forms, of
co-dimension 1. In an inhomogeneous medium where action potential
duration depends on position, the edge of the inhomogeneity can take any
shape, such that the discontinuity of $\varphi$ needs
not be a line but can take any shape: Closed or branching phase defect
structures may also form.&lt;/p&gt;
&lt;p&gt;To numerically detect the phase defect, we compute the phase defect
density $\rho({{\bm{{r}}}},t)$ over all pixels of the
grid (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al., 2022&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al.,
2021&lt;/a&gt;):
&lt;span id="eq:feynman:rho"&gt;$$\begin{aligned}
 \rho({{\bm{{r}}}}_a,t)
 =
 \frac{1}{2 N_a}
 \sum_{b \in \mathcal{N}(a)}
 [1 - \cos(
 \varphi({{\bm{{r}}}}_a,t)
 -
 \varphi({{\bm{{r}}}}_b,t)
 )]
\end{aligned}\qquad{(4)}$$&lt;/span&gt; Here,
$\mathcal{N}(a)$ is the set of nearest neighbours in
the Cartesian grid next to the point
${{\bm{{r}}}}_a$. $N_a$ is the
number of such neighbours; it is everywhere four except near the domain
boundaries or inexcitable obstacles. When the phases locally differ
much, $\rho$ will have a value close to
$1$. If all excitable elements excite simultaneously,
$\rho=0$. The set $\mathrm{Z}$ of
points inside a phase defect can be identified numerically as the set
where $\rho$ exceeds a chosen threshold value
$\rho_*$ (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;):
&lt;span id="eq:feynman:Z"&gt;$$\begin{aligned}
 \mathrm{Z}(t) = \{
 {{\bm{{r}}}}
 \;|\;
 \rho({{\bm{{r}}}}, t) &gt; \rho_*
 \}
\end{aligned}\qquad{(5)}$$&lt;/span&gt; In this
manner, the phase defect region $\mathrm{Z}$ forms an
open subset of the domain; it is not a one-dimensional curve anymore.
The contours $\mathcal{C}$ obeying
$\rho = \rho_*$ encircling each phase defect are
well-defined and will be used below.&lt;/p&gt;
&lt;p&gt;It is also possible to start from the classical activation phase,
rescale it via a sigmoid function and then compute the phase defect
density (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al., 2022&lt;/a&gt;). In that case,
the phase defect also becomes an open set
$\mathrm{Z}$, surrounded by a continuous contour
$\mathcal{C}$.&lt;/p&gt;
&lt;div id="sec:feynman:special:points"&gt;
&lt;h2 id="special-points"&gt;Special points
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The essence of our analysis is to divide the medium in three regions and
to identify the points where all these regions meet, see
Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First, we compute the phase defect density $\rho$ via
Eq. &lt;a class="link" href="#eq:feynman:rho" &gt;4&lt;/a&gt; to find all points within the phase defect
$\mathrm{Z}$, see Eq. &lt;a class="link" href="#eq:feynman:Z" &gt;5&lt;/a&gt;. These
points will be colored in gray.&lt;/p&gt;
&lt;p&gt;Let $0&lt;\varphi_\mathrm{F}&lt;\varphi_\mathrm{B}&lt;2\pi$,
where $\varphi_\mathrm{F}$ is a small phase threshold
close to $0$, and
$\varphi_\mathrm{B}$ a large phase threshold close to
$2\pi$, which must be small enough that a jump from
$\varphi_\mathrm{B}$ to
$\varphi_\mathrm{F}$ is considered a phase defect
following Eq. &lt;a class="link" href="#eq:feynman:rho" &gt;4&lt;/a&gt; and Eq. &lt;a class="link" href="#eq:feynman:Z" &gt;5&lt;/a&gt;. The set
of points where the phase is between these values and outside a phase
defect is the excited region ($\mathrm{E}$):
&lt;span &gt;$$\begin{aligned}
\mathrm{E}(t) = \{
 {{\bm{{r}}}}\;|\;
 \rho({{\bm{{r}}}}, t) &lt; \rho_*
 \wedge
 \varphi({{\bm{{r}}}}, t) \in (\varphi_\mathrm{F}, \varphi_\mathrm{B})
\}
\end{aligned}\qquad{(6)}$$&lt;/span&gt; and is
depicted in yellow in Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;. The set of points
outside of that range and phase defects is called unexcited
($\mathrm{U}$) and coloured white:
&lt;span &gt;$$\begin{aligned}
\mathrm{U}(t) = \{
 {{\bm{{r}}}}\;|\;
 \rho({{\bm{{r}}}}, t) &lt; \rho_*
 \wedge
 \varphi({{\bm{{r}}}}, t) \not\in [\varphi_\mathrm{F}, \varphi_\mathrm{B}]
\}
\end{aligned}\qquad{(7)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Where the excited region meets the unexcited one, the wave front
($\mathrm{F}$) and wave back
($\mathrm{B}$) are found, denoted in cyan and
magenta, respectively:
&lt;span &gt;$$\begin{aligned}
\mathrm{F}(t) = \{
 {{\bm{{r}}}}\;|\;
 \rho({{\bm{{r}}}}, t) &lt; \rho_*
 \wedge
 \varphi({{\bm{{r}}}}, t) = \varphi_\mathrm{F}
\}
\\
\mathrm{B}(t) = \{
 {{\bm{{r}}}}\;|\;
 \rho({{\bm{{r}}}}, t) &lt; \rho_*
 \wedge
 \varphi({{\bm{{r}}}}, t) = \varphi_\mathrm{B}
\}
\end{aligned}\qquad{(8)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;For completeness, we remark that two other boundaries of co-dimension 1
exist: the border between $\mathrm{Z}$ and
$\mathrm{U}$, and the border between
$\mathrm{Z}$ and $\mathrm{E}$.
Together they form the aforementioned contours
$\mathcal{C}$.&lt;/p&gt;
&lt;p&gt;In the classical theory of excitation, the wave front meets the wave
back in a single point, and this point coincides with the classical
phase singularity (&lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et al., 2006&lt;/a&gt;; &lt;a class="link" href="#ref-gray1995mechanisms" &gt;Gray
et al., 1995&lt;/a&gt;; &lt;a class="link" href="#ref-zykov1987simulation" &gt;Zykov,
1987&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In our case, wave fronts and wave backs will always end on a phase
defects and medium boundaries. We call the point where a wave front and
a phase defect meet, a &amp;lsquo;head&amp;rsquo; (denoted in blue) and a point where a wave
back and a phase defect meet, a &amp;rsquo;tail&amp;rsquo; (denoted in red). Essentially,
heads and tails are the loci where the three distinct zones
($\mathrm{E}$, $\mathrm{U}$ and
$\mathrm{Z}$) meet. As such, any continuous
deformation of the boundaries between these zones will not affect the
existence of such special points. Therefore, we call heads and tails
topologically protected. A similar reasoning holds under time evolution:
If the excited, unexcited and phase defect regions change their
boundaries in a continuous manner, the head point can move in time, but
is only lost if it meets another head or a medium boundary. An analogous
reasoning justifies to call the tail points to be topologically
conserved.&lt;/p&gt;
&lt;p&gt;From Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;E, we see that heads can exist with two
different chiralities: If one circumscribes the head point
counterclockwise and meets the regions $\mathrm{Z}$,
$\mathrm{E}$, $\mathrm{U}$ in that
order, we call it a &amp;lsquo;positive&amp;rsquo; head, denoted
$\mathrm{h}^+$. If we find the order
$\mathrm{Z}$, $\mathrm{U}$,
$\mathrm{E}$, we call it a &amp;rsquo;negative&amp;rsquo; head, written
$\mathrm{h}^-$. These intuitive notions will be
formalized below, to grant them the meaning of a &amp;lsquo;charge&amp;rsquo;.&lt;/p&gt;
&lt;p&gt;For now, let us return to the depiction of a linear-core rotor in
Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;D. We observe yet another type of special
point, namely the end point of the phase defect line. Such point are
already known in literature as the loci around which the wave turns
suddenly, and hence we also call them &amp;lsquo;pivots&amp;rsquo;. Using the LAT-based
phase definition Eq. &lt;a class="link" href="#eq:feynman:phi:lin" &gt;3&lt;/a&gt;, it follows that the phase
defects are truly curves of discontinuous phase. Hence these lines can
have distinct end points, the pivots. The phase defect lines may also
branch spatially; in such case a phase defect &amp;lsquo;joint&amp;rsquo; will emerge, which
however falls outside the scope of our present exposition. Pivots also
exist in two flavours, see Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;E: If the wave
made a sudden half-turn to the left at that pivot, we call the pivot
point a $\mathrm{p}_+$, with the plus sign marking
counterclockwise rotation. If the half-turn was to the right, we call it
a $\mathrm{p}_-$. We will discuss the topological
preservation of pivots below, after the formal introduction of pivot
charge.&lt;/p&gt;
&lt;div id="sec:feynman:charges"&gt;
&lt;h2 id="two-topological-charges-rotation-in-state-space-vsrotation-in-physical-space"&gt;Two topological charges: rotation in state space vs. rotation in physical space
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;We will here demonstrate that heads and tails carry half-integer charges
that are identical to the classical &amp;lsquo;charge&amp;rsquo; of a phase singularity.
Pivots carry a charge that is also half-integer, but of a different
kind.&lt;/p&gt;
&lt;p&gt;First, consider a portion of the contour
$\mathcal{C}$ that surrounds a phase defect in a
counterclockwise sense, i.e., with the phase defect to the left. See
Fig. &lt;a class="link" href="#fig:feynman:concepts" &gt;2&lt;/a&gt;. With arc length parameter
$\ell$, we evaluate the classical charge density:
&lt;span id="eq:feynman:int:Q"&gt;$$\begin{aligned}
 Q
 =
 - \frac{1}{2\pi} \int
 d \varphi
 =
 - \frac{1}{2\pi} \int
 {{\bm{{\nabla}}}} \varphi \cdot {{\bm{{d \ell}}}}.
\end{aligned}\qquad{(9)}$$&lt;/span&gt; Here,
$\varphi$ can be any phase related to the local state
of cells; both Eq. &lt;a class="link" href="#eq:feynman:phi:act" &gt;1&lt;/a&gt; and
Eq. &lt;a class="link" href="#eq:feynman:phi:lin" &gt;3&lt;/a&gt; are possible, just like other choices
(&lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et al., 2006&lt;/a&gt;; &lt;a class="link" href="#ref-gray1995mechanisms" &gt;Gray et al.,
1995&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al.,
2021&lt;/a&gt;). The minus sign is included such that a
counterclockwise rotating spiral has $Q=+1$. Authors
usually evaluate Eq. &lt;a class="link" href="#eq:feynman:int:Q" &gt;9&lt;/a&gt; around a closed contour, to
find that $Q$ always takes an integer value if
$\varphi$ is well-defined over the entire contour.
However, if one takes only a portion of the contour, one can find the
charge density $dQ = - \frac{d\varphi}{2\pi}$. Part
of the phase change occurs during excitation, and part during the
biological recovery process. If one assumes these changes to take place
at the wave front and wave back, a phase change of
$\pm \pi$ will be found each time the contour
encircling the phase defect meets a wave front or wave back. These
values correspond to localized charges of
$\pm \frac{1}{2}$. Therefore, we here choose to
ascribe a topological charge of $\pm \frac{1}{2}$ to
heads and tails, with the sign chosen as in
Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;E. In principle, this choice can be made
rigorous by defining the phase in the region
$\mathrm{U}$ to be 0 and the phase over the region
$\mathrm{E}$ to be $\pi$.
Elegantly, the sum of all head and tail charges when circumscribing a
phase defect equals the classical topological charge
$Q$. To distinguish it from the pivot charge below,
we call this the $Q$-charge. From the above, it
follows that the $Q$-charge in a way &amp;lsquo;measures&amp;rsquo; the
amount of rotation in state space.&lt;/p&gt;
&lt;p&gt;Second, we introduce the pivot charge as follows. Define the angle of
wave propagation as:
&lt;span &gt;$$\begin{aligned}
 \psi = \operatorname{atan2}( \partial_y t_\mathrm{LAT}, \partial_x t_\mathrm{LAT}).
\end{aligned}\qquad{(10)}$$&lt;/span&gt; where
the LAT is continuous and differentiable. $\psi$ is
the angle with the positive $x$-direction under which
the last arrived activation wave travelled. Now, in full analogy with
Eq. &lt;a class="link" href="#eq:feynman:int:Q" &gt;9&lt;/a&gt;, step along the contour
$\mathcal{C}$ while keeping the phase defect to the
left:
&lt;span id="eq:feynman:int:P"&gt;$$\begin{aligned}
 P
 =
 \frac{1}{2\pi}
 \int
 d \psi
 =
 \int
 {{\bm{{\nabla}}}}\psi \cdot {{\bm{{d \ell}}}}
\end{aligned}\qquad{(11)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Let us verify how the $P$-charge density
$d P = \frac{d\psi}{2\pi}$ behaves in standard cases.
First, take the neighbourhood of the positive pivot at the top-right
panel of Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;E. There, the wave turns over
$+\pi$ near the pivot, such that
$P=+\frac{1}{2}$. This corresponds to the intuitive
notion of &amp;lsquo;half a turn to the left&amp;rsquo; that we advocated above. Similarly,
a negative pivot $\mathrm{p}_-$ can now be proven to
have $P=-\frac{1}{2}$. Third, consider a classical
spiral wave core denoted as $\mathrm{c}^+$ in the
bottom row of Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;E. Near the classical phase
singularity, phase gradients will become arbitrarily large, such that
the classical phase singularity is also a special case of a phase
defect: It is a phase defect of small size (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;), whose exact diameter depends on the chosen
$\rho_*$. Evaluating $P$ around a
closed contour that circumscribes the phase singularity counterclockwise
delivers: $P=+1$. Noteworthily, even circular rotor
cores form over time from conduction blocks: Initially, a finite
conduction block line is created, e.g. by an S1-S2 stimulus protocol,
with two pivots each having $P=+\frac{1}{2}$. During
successive wave rotations, this phase defect shrinks to a point. At that
time, the two pivots with $P=+\frac{1}{2}$ as well as
the head and tail with each $Q=+\frac{1}{2}$ merge to
form a stable state, with $P=+1$ and
$Q=+1$, that we call a &amp;lsquo;core particle&amp;rsquo; here.&lt;/p&gt;
&lt;p&gt;Let us now investigate when the $P$-charge is
conserved. Hereto, we apply Stokes&amp;rsquo; theorem to
Eq. &lt;a class="link" href="#eq:feynman:int:P" &gt;11&lt;/a&gt; on a closed contour
$\mathcal{C}$ around a region $S$.
&lt;span id="eq:feynman:stokes"&gt;$$\begin{aligned}
 P = \frac{1}{2\pi} \oint d \psi =\oint {{\bm{{\nabla}}}}\psi \cdot {{\bm{{d \ell}}}} =
 \iint {{\bm{{\nabla}}}} \times {{\bm{{\nabla}}}}\psi \cdot {{\bm{{d s}}}} =0
\end{aligned}\qquad{(12)}$$&lt;/span&gt; The last
equality follows from the properties of curl and gradient. The
second-last equality requires that the conditions for Stokes&amp;rsquo; theorem
are fulfilled: That ${{\bm{{\nabla}}}}\psi$ is
everywhere in $S$ defined, and that it has continuous
first derivatives. Result Eq. &lt;a class="link" href="#eq:feynman:stokes" &gt;12&lt;/a&gt; implies that
$P$ will not change its value if the contour is
continuously deformed outside regions with phase defects or phase
singularities (where $\psi$ is undefined), or where
$\psi$ suddenly changes its orientation. The latter
case happens at excitation sources, or on the boundary at the position
where it was hit by a wave front. Given these limitations, the
$P$-charge is conserved. E.g. a closed contour may
contain two opposite rotating linear-core rotors, i.e., with
$2\mathrm{p}_+$ and
$2\mathrm{p}_-$ in it. The total
$P=\frac{1}{2}+\frac{1}{2}-\frac{1}{2}-\frac{1}{2}=0$.
If these rotors merge to form a single conduction block line, a
$\mathrm{p}_+$, $\mathrm{p}_-$
pair annihilates, leaving the second
$\mathrm{p}_+, \mathrm{p}_-$ inside the contour, and
still $P=\frac{1}{2}-\frac{1}{2}=0$.&lt;/p&gt;
&lt;p&gt;In conclusion, the $P$-charge measures the amount of
rotation in physical space. It is thus different from the
$Q$-charge, carried by heads and tails. Therefore,
when using the detailed notation for charges (see
Table &lt;a class="link" href="#tbl:feynman:particles" &gt;1&lt;/a&gt;), we denote the
$P$-charge in subscript:
$\mathrm{p}_\pm$.&lt;/p&gt;
&lt;div id="sec:feynman:quasiparticles"&gt;
&lt;h2 id="quasiparticles"&gt;Quasiparticles
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Until here, we have identified three different special points in
excitable media, that can carry half-integer &amp;lsquo;charges&amp;rsquo; and that seem to
be preserved under time evolution (for now disregarding boundaries and
obstacles). We propose to refer to these special points as
quasiparticles and call them &amp;lsquo;cardions&amp;rsquo;. Examples of the seven different
cardions that we know now of are given in Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;E.
While three cardions are elementary, heads, tails and pivots, four of
them arise as bound states between the elementary ones.&lt;/p&gt;
&lt;div id="sec:feynman:bound:states"&gt;
&lt;h2 id="bound-states"&gt;Bound states
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Strikingly, our analysis of activation patterns in simulation and
experiments revealed that the heads, tails and pivots tend to form bound
states, see Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;E and
Table &lt;a class="link" href="#tbl:feynman:particles" &gt;1&lt;/a&gt;. The situation reminds us of the
hydrogen atom consisting of a proton and an electron, or the proton
itself, which is made up of quarks in particle physics.&lt;/p&gt;
&lt;p&gt;The first bound state consists of a head and a tail of equal
$Q$-charge. Already in Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;D,
it can be seen that while the tail traces a phase defect, a head can
follow it directly, exciting the newly-recovered tissue created by the
tail particle. The two special points propagate as a pair along the
phase defect, with an excitable gap between them. In the classical
viewpoint, this corresponds to a wave front and wave back ending in one
point, the classical &amp;lsquo;spiral tip&amp;rsquo;. In three spatial dimensions, the tips
form a filament curve (&lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et al., 2006&lt;/a&gt;;
&lt;a class="link" href="#ref-winfree1996quantitative" &gt;Winfree et al., 1996&lt;/a&gt;) around which the
wave rotates. Therefore, we annotate the bound state of head and tail
with f and call it a filament point and annotate it in the colour
purple. The convention of assigning half a $Q$-charge
to heads and tails has the useful property that the sum of these charges
will be equal to the classical topological charge
$Q=\frac{1}{2}+ \frac{1}{2} = 1$ of the filament. As
the absolute charge of a filament particle is always the same, we
abbreviate the &amp;lsquo;full&amp;rsquo; notation f$^{\pm \pm}$ to
$\mathrm{f}^{\pm}$, see second column in
Table &lt;a class="link" href="#tbl:feynman:particles" &gt;1&lt;/a&gt;. In this simpler notation, we write
the charges of all particles with superscript, for example,
$\mathrm{p}^+$, rather than
$\mathrm{p}_+$.&lt;/p&gt;
&lt;p&gt;The second bound state is the core particle, which we introduced above
as an example of $P$-charge. This core particle
occurs with rigidly rotating spiral waves, where the phase defect is
small and head and tails are close to each other. Since these cores
typically form from shrinking of a phase defect line containing two
pivots of the same charge, the core particle consists of a head, a tail
and two pivots (where the latter are no more distinguishable). This
&amp;lsquo;core particle&amp;rsquo;, denoted
$\mathrm{c}^{\pm\pm}_{\pm\pm}$ or shorter
$\mathrm{c}^{\pm}$ and indicated by an orange circle,
see the bottom panel of Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;E.&lt;/p&gt;
&lt;p&gt;The next two bound states have no classical counterpart to our
knowledge. Consider a propagating wave front that hits a wave back. Such
event will generally occur in a single point first, creating a small
phase defect. The end point of one side of the wave front will then
travel along the existing wave back, and in the process, the conduction
block region grows to become a phase defect line. Hence, there exists a
state of a head, tail, and pivot of the same chirality that all move
together. We call this a &amp;lsquo;growth&amp;rsquo; particle and denote it with a teal
circle. It has $Q=\pm 1$ and
$P=\pm \frac{1}{2}$, with the same sign chosen.
Hence, we identify quasiparticles g$^{++}_+$ and
$\mathrm{g}^{--}_{-}$, or
$\mathrm{g}^+$, $\mathrm{g}^-$ in
shortened notation (see Table &lt;a class="link" href="#tbl:feynman:particles" &gt;1&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Finally, we were ourselves struck by the observation that the shrinking
and growing of phase defect lines occurs in an asymmetric manner. When a
wave back travels along a phase defect such that the tissue has
recovered at both sides of the defect line, the phase defect line will
retract, see Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;E, bottom right. Such
retraction implies that a tail and a pivot of same chirality travel
together. We denote this as a &amp;lsquo;shrink&amp;rsquo; particle
s$^\pm_\pm$, shortened s$^\pm$,
and mark it in brown. Table &lt;a class="link" href="#tbl:feynman:particles" &gt;1&lt;/a&gt; summarises the
hitherto discovered quasiparticles and their bound states in excitable
media.&lt;/p&gt;
&lt;div id="sec:feynman:bnd"&gt;
&lt;h2 id="medium-boundaries-and-conservation-laws"&gt;Medium boundaries and conservation laws
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Until here, we have disregarded inexcitable obstacles in the medium,
which also includes the medium boundary itself.&lt;/p&gt;
&lt;p&gt;Let us first consider how the $Q$-charge behaves in
the presence of obstacles. In the example of
Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;D, the total $Q$-charge
in the medium disregarding the medium boundaries would be
$-\frac{1}{2}-\frac{1}{2} = -1$. However, we now
argue that it might be useful to also regard medium boundaries as a kind
of phase defect. If we do this, e.g. by colouring the medium boundaries
also in grey, it follows that every wave front is either closed or has
two endpoints (heads) with different chirality. A similar reasoning
holds for the wave backs, which are either closed, or end in two tails
of opposite charge. Then, by construction the total
$Q$-charge for both all heads in
$H$, the set of heads, and tails in
$T$, the set of tails, must be zero:
&lt;span &gt;$$\begin{aligned}
\sum_{h \in H} Q_h &amp;= 0
\\
\sum_{t \in T} Q_t &amp;= 0
\end{aligned}\qquad{(13)}$$&lt;/span&gt; These
relations only hold if medium boundaries are considered as phase
defects.&lt;/p&gt;
&lt;p&gt;Taking the sum of the previous two statements proves that the total
$Q$-charge in a two-dimensional medium is also always
zero: &lt;span &gt;$$\begin{aligned}
\sum_{j \in H \cup T} Q_j &amp;= 0
\end{aligned}\qquad{(14)}$$&lt;/span&gt;
considering medium boundaries as phase defects. This result is stronger
than the conservation of phase singularities, which only holds in the
bulk of the medium.&lt;/p&gt;
&lt;p&gt;In the viewpoint that includes medium boundaries and inexcitable
obstacles, the classical annihilation of a rotor core at the medium
boundary can be regarded as the head-tail pair becoming a pair of a head
and tail which are travelling apart from each other on the boundary.
Also, the generation of a single rotor via S1-S2 stimulation now
includes the boundary: The S2 pulse introduces a pair of heads, one of
which joins a tail particle of the S1 pulse to form a filament
quasiparticle.&lt;/p&gt;
&lt;p&gt;An additional reason for including the medium boundary in the
description lies in the interpretation of electrical signals. In leading
order, the unipolar electrical potential measured by an electrode is
determined by the angle subtended by the wave fronts and wave backs,
seen from the electrode (&lt;a class="link" href="#ref-holland1977solid" &gt;Holland &amp;amp; Arnsdorf,
1977&lt;/a&gt;). The measured signal is thus only
determined by the boundaries of the wave fronts and backs, namely the
heads and tail curves in three dimensions (&lt;a class="link" href="#ref-arno2024strings" &gt;Arno et al.,
2024b&lt;/a&gt;). Therefore, the concepts of heads and
tails may also prove useful when improving efficient inverse methods to
recover spatiotemporal activation sequences from patient measurements
(&lt;a class="link" href="#ref-ramanathan2004noninvasive" &gt;Ramanathan et al., 2004&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Second, we consider how the pivot charge behaves in the presence of
obstacles. If a wave front travels clockwise along the edge of a square
domain, it will turn 90 ° to the right when crossing the corner. Thus,
according to Eq. &lt;a class="link" href="#eq:feynman:int:P" &gt;11&lt;/a&gt;, the corners of a square domain
carry a pivot charge of $\pm\frac{1}{4}$. Since the
edge of obstacles can turn over any angle, pivot charges are not always
half-integer, but can take on the boundary of the medium arbitrary
values in $(-1,1)$. Another example is a wave hitting
an obstacle within the medium, as shown in
Fig. &lt;a class="link" href="#fig:feynman:obstacle:p" &gt;3&lt;/a&gt;. Suppose the wave encircling the
obstacle counterclockwise travels over an angle
$\psi_\mathrm{l} &gt;0$, while the wave travelling in
the other direction around the obstacle over an angle
$\psi_\mathrm{r} &lt; 0$, with
$|\psi_\mathrm{l}| + |\psi_\mathrm{r}| = 2\pi$ .
Then, the $P$-charge of this obstacle will become via
Eq. &lt;a class="link" href="#eq:feynman:int:P" &gt;11:&lt;/a&gt;
$P = \frac{\psi_\mathrm{l} + \psi_\mathrm{r}}{2\pi} \in [-1, 1]$.
In this situation, the $P$-charge is not conserved.
Nonetheless, the value of the integral Eq. &lt;a class="link" href="#eq:feynman:int:P" &gt;11&lt;/a&gt;
contains useful information: If it has $P = \pm 1$, a
rotor is attached to the obstacle, while $P = 0$
indicates a symmetric conduction block. Intermediate values of
$P$ indicate whether the wave-obstacle interaction is
close to the formation of a rotor attached to the obstacle or not.&lt;/p&gt;
&lt;div id="fig:feynman:obstacle:p"&gt;
&lt;p&gt;&lt;img alt="Non-integer P-charges are possible for paths around inexcitable obstacles." class="gallery-image" data-flex-basis="461px" data-flex-grow="192" height="1030" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/obstacle.p.png" srcset="https://kabus.eu/2024/11/22/arno2024feynman/figures/obstacle.p_hu_9abccb5e32f0bc24.png 800w, https://kabus.eu/2024/11/22/arno2024feynman/figures/obstacle.p_hu_85c59804d918e4e3.png 1600w, https://kabus.eu/2024/11/22/arno2024feynman/figures/obstacle.p.png 1982w" width="1982"&gt;&lt;/p&gt;
&lt;p&gt;Figure 3: Non-integer $P$-charges are possible for
paths around inexcitable obstacles.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In summary, $P$-charge is not conserved in the
presence of medium boundaries. This was also the case for the
$Q$-charge with classical phase singularities, as
they can simply vanish by collision with the medium boundary.&lt;/p&gt;
&lt;div id="sec:feynman:diagrams"&gt;
&lt;h2 id="graphical-depiction-of-processes-via-feynman-like-diagrams"&gt;Graphical depiction of processes via Feynman-like diagrams
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In the last step of our conceptual framework, we describe the evolution
of cardions via diagrams similar to Feynman diagrams (&lt;a class="link" href="#ref-feynman1949theory" &gt;Feynman,
1949&lt;/a&gt;). A first example is given in
Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;F. A $\mathrm{g}^+$,
$\mathrm{g}^-$ pair is born, after which the growth
particles each split into triples of head, tail, and pivot. In this
graphical depiction, time passes from left to right and positions in
space are represented along a single, vertical axis. The arrows
represent the continuous existence of the quasiparticle in space and
time, until an event happens in which the particle merges, splits or
annihilates. The premise of this work is that these diagrams can offer
insight in the pattern&amp;rsquo;s dynamics, see the examples below.&lt;/p&gt;
&lt;div id="sec:feynman:results"&gt;
&lt;h1 id="results"&gt;Results
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:feynman:smooka"&gt;&lt;/p&gt;
&lt;h2 id="figure-of-eight-formation-in-silico"&gt;Figure of eight formation in-silico
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Fig. &lt;a class="link" href="#fig:feynman:smooka_creation" &gt;4&lt;/a&gt; shows a numerical simulation in
the smoothed Karma model (&lt;a class="link" href="#ref-karma1993spiral" &gt;Karma, 1993&lt;/a&gt;; &lt;a class="link" href="#ref-marcotte2017dynamical" &gt;Marcotte
&amp;amp; Grigoriev, 2017&lt;/a&gt;) for atrial fibrillation,
in which a single rotor spontaneously breaks up into multiple vortices.
We analyze the creation of a vortex pair, known in cardiology literature
as a figure-of-eight re-entry (&lt;a class="link" href="#ref-wu1994double" &gt;Wu et al., 1994&lt;/a&gt;). In
the top two rows, phase singularities detected by the Kuklik method
(&lt;a class="link" href="#ref-kuklik2016identification" &gt;Kuklik et al., 2016&lt;/a&gt;) are annotated on
top of the normalised transmembrane voltage and phase. The vortex pair
with labels 2 and 3 is situated away from a central persisting rotor,
labelled 1. In the third row of panels, heads, tails and pivots, as well
as their bound states are annotated. When the wave front hits the wave
back, a pair of $\mathrm{g}^+$,
$\mathrm{g}^-$ emerges. Each particle lasts until the
vortex makes a pivoting turn around the formed conduction block line,
which marks the decay of the $\mathrm{g}$-particles
into triples of head, tail, and pivot. Just after
$t={465~\mathrm{{m}{s}}}$, the tail pair annihilates,
as the wave back detaches from the conduction block line to form a
single wave back again. The recovery of the tissue at the location of
the initial collision marks the splitting of the phase defect line,
which involves the birth of a shrink pair, just before
$t={510~\mathrm{{m}{s}}}$. Thereafter, both phase
defect lines shrink until the head, tail, and two pivots are so close to
each other that they effectively form a core particle. We conclude that
the birth of a rotor pair, which is a single event in the classical
theory, in fact consists of seven subsequent events, revealed by the
vertices in the diagram at the bottom of
Fig. &lt;a class="link" href="#fig:feynman:smooka_creation" &gt;4&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:feynman:smooka_creation"&gt;
&lt;p&gt;&lt;img alt="Diagrammatic analysis of the creation of two spiral waves in a simulation of break-up (Karma, 1993, 1994)" class="gallery-image" data-flex-basis="279px" data-flex-grow="116" height="1806" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/smooka.creation.png" srcset="https://kabus.eu/2024/11/22/arno2024feynman/figures/smooka.creation_hu_70d04aa8c4e4c975.png 800w, https://kabus.eu/2024/11/22/arno2024feynman/figures/smooka.creation_hu_f2411e30e964a1f1.png 1600w, https://kabus.eu/2024/11/22/arno2024feynman/figures/smooka.creation.png 2106w" width="2106"&gt;&lt;/p&gt;
&lt;p&gt;Figure 4: &lt;strong&gt;Diagrammatic analysis of the creation of two spiral waves in
a simulation of break-up (&lt;a class="link" href="#ref-karma1993spiral" &gt;Karma, 1993&lt;/a&gt;,
&lt;a class="link" href="#ref-karma1994electrical" &gt;1994&lt;/a&gt;).&lt;/strong&gt; First row: Snapshots of the
normalized transmembrane potential with the phase singularities
highlighted which were detected by the Kuklik method (&lt;a class="link" href="#ref-kuklik2016identification" &gt;Kuklik et al.,
2016&lt;/a&gt;), and in the second row,
corresponding phase maps (&lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al., 1998&lt;/a&gt;;
&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al., 2022&lt;/a&gt;). Third row:
Identification of the quasiparticles in subsequent snapshots. The
resulting diagram at the bottom shows that the birth of a rotor pair
involves seven topological interactions, including the creation of a
shrink pair, and the splitting of a conduction block line. No heads,
tails, or pivots are drawn at the boundary since it is an inset, not the
medium boundary. The vortex with label 1 is excluded from the diagram of
topological interactions. The same color scheme as in
Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt; is used consistently in this article.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:feynman:hiam"&gt;&lt;/p&gt;
&lt;h2 id="figure-of-eight-creation-in-vitro-under-burst-pacing"&gt;Figure of eight creation in-vitro under burst pacing
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The creation of a figure-of-eight spiral pair in a monolayer of human
atrial myocytes (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al., 2022&lt;/a&gt;) is
thoroughly analyzed via the quasiparticles and diagrams in
Figs. &lt;a class="link" href="#fig:feynman:hiam" &gt;5&lt;/a&gt;-&lt;a class="link" href="#fig:feynman:hiam:split" &gt;9&lt;/a&gt;, see also the
Methods section below. By adding a voltage-sensitive dye to the cell
culture, the local transmembrane voltage could be optically mapped
(&lt;a class="link" href="#ref-salama1987maps" &gt;Salama et al., 1987&lt;/a&gt;), which is shown here after
normalization to $[0,1]$. The culture was stimulated
at a high frequency from the top left corner. After several transient
wave breaks, i.e., conduction blocks, a pair of oppositely rotating
spiral waves was formed. The experiment presents an in-vitro realization
of the onset of an arrhythmia, an event to be prevented in patients.&lt;/p&gt;
&lt;div id="fig:feynman:hiam"&gt;
&lt;p&gt;&lt;img alt="Feynman-like diagram of the creation of two spiral waves via two merging conduction block lines (CBLs) in an optical voltage mapping experiment" class="gallery-image" data-flex-basis="414px" data-flex-grow="172" height="1144" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.diagram.png" srcset="https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.diagram_hu_5f19fbe2bb446c5f.png 800w, https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.diagram_hu_a94edf3c92eaa836.png 1600w, https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.diagram.png 1975w" width="1975"&gt;&lt;/p&gt;
&lt;p&gt;Figure 5: &lt;strong&gt;Feynman-like diagram of the creation of two spiral waves via
two merging conduction block lines (CBLs) in an optical voltage mapping
experiment.&lt;/strong&gt; The detailed quasiparticle viewpoint shows that both
events are part of a single complex multi-stage process of up to twelve
quasiparticles at the same time interacting in 93 reactions. The stages
&lt;strong&gt;A, B, D, &amp;amp; E&lt;/strong&gt; are shown in more detail in
Figs. &lt;a class="link" href="#fig:feynman:hiam" &gt;5&lt;/a&gt;-&lt;a class="link" href="#fig:feynman:hiam:split" &gt;9&lt;/a&gt;, respectively.
The formation of the second CBL in panel &lt;strong&gt;C&lt;/strong&gt; is analogous to the first
one in panel &lt;strong&gt;A&lt;/strong&gt; and Fig. &lt;a class="link" href="#fig:feynman:hiam:init" &gt;6&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Fig. &lt;a class="link" href="#fig:feynman:hiam" &gt;5&lt;/a&gt; presents a diagrammatic overview of the
figure-of-eight spiral pair formation, while
Figs. &lt;a class="link" href="#fig:feynman:hiam:init" &gt;6&lt;/a&gt;-&lt;a class="link" href="#fig:feynman:hiam:split" &gt;9&lt;/a&gt; present
parts of this process in more detail in the same style as
Fig. &lt;a class="link" href="#fig:feynman:smooka_creation" &gt;4&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As can be seen in Fig. &lt;a class="link" href="#fig:feynman:hiam:init" &gt;6&lt;/a&gt;, the initial
conduction block produces a growth pair just before
$t={4056~\mathrm{{m}{s}}}$, in the same way as in the
in-silico case above, which then break apart into a head, tail and pivot
each. The tails and heads annihilate and leave the persisting pair of
pivots behind, marking the end points of the conduction block line.
Later on, a secondary conduction block forms in the same way, also
producing a pivot-pair, Fig. &lt;a class="link" href="#fig:feynman:hiam" &gt;5&lt;/a&gt;C.&lt;/p&gt;
&lt;div id="fig:feynman:hiam:init"&gt;
&lt;p&gt;&lt;img alt="Creation of a persisting pair of pivot particles due to conduction block" class="gallery-image" data-flex-basis="279px" data-flex-grow="116" height="1806" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.init.png" srcset="https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.init_hu_ef843fb59a64cf7c.png 800w, https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.init_hu_8e7c5959c3d2c2fa.png 1600w, https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.init.png 2106w" width="2106"&gt;&lt;/p&gt;
&lt;p&gt;Figure 6: &lt;strong&gt;Creation of a persisting pair of pivot particles due to
conduction block&lt;/strong&gt; as the first step of figure-of-eight spiral formation
in the optical mapping experiment, Fig. &lt;a class="link" href="#fig:feynman:hiam" &gt;5&lt;/a&gt;A. At
first, when the wave front runs into the wave back, a pair of growth
particles is formed, which then decay into a pivot, head, and tail each.
The heads and tails annihilate, while the pivot particles persist.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The process causing the the mere conduction block to develop into a
dangerous figure-of-eight reentry, which can be life-threatening in
peoples&amp;rsquo; hearts, can be seen in Fig. &lt;a class="link" href="#fig:feynman:hiam:accumulation" &gt;7&lt;/a&gt;
After the wave back hits the phase defect region of the conduction
block, a tail pair is produced. Each tail then meets the persisting
pivot particles to produce shrink particles that begin to shorten the
conduction block line at $t={4164~\mathrm{{m}{s}}}$.
However, shortly afterwards at
$t={4170~\mathrm{{m}{s}}}$, the wave front also hits
the phase defect, leading to a pair of heads, that combine with the
shrinks to growth particles. Driven by this pair, the conduction block
line grows again, until the growth particles decay into a head, tail and
pivot each. Just after $t={4194~\mathrm{{m}{s}}}$,
the tails annihilate, as well as the heads just after
$t={4212~\mathrm{{m}{s}}}$, while again two pivot
particles persist. As the growing outweighs the shrinking in this case,
in total, the phase defect length accumulated. The distance between the
pivots increased from
${(2.85\ ±\ 0.50)~\mathrm{{m}{m}}}$ at
$t={4146~\mathrm{{m}{s}}}$ to
${(4.65\ ±\ 0.50)~\mathrm{{m}{m}}}$ at
$t={4212~\mathrm{{m}{s}}}$. This process repeats six
times, each time making the phase defect longer.&lt;/p&gt;
&lt;div id="fig:feynman:hiam:accumulation"&gt;
&lt;p&gt;&lt;img alt="Accumulation of conduction block" class="gallery-image" data-flex-basis="335px" data-flex-grow="139" height="1506" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.accumulation.png" srcset="https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.accumulation_hu_77d56727d48e1881.png 800w, https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.accumulation_hu_bb9f22a921b6e76c.png 1600w, https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.accumulation.png 2106w" width="2106"&gt;&lt;/p&gt;
&lt;p&gt;Figure 7: &lt;strong&gt;Accumulation of conduction block&lt;/strong&gt; is the process of
shrinking due to a wave back hitting a phase defect line and growing due
to a wave front, which, in total, makes the conduction block grow. This
process is observed another five times in the data during the following
burst pacing pulses leading up to figure-of-eight spiral formation in
the optical mapping experiment, Fig. &lt;a class="link" href="#fig:feynman:hiam" &gt;5&lt;/a&gt;B.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;At $t={4854~\mathrm{{m}{s}}}$, also the second phase
defect has formed, and both will merge, as visualized in
Fig. &lt;a class="link" href="#fig:feynman:hiam:merge" &gt;8&lt;/a&gt;. The merging process starts when both
defects grow with a pair of $\mathrm{g}^+$ and
$\mathrm{g}^-$ each. Then, the growth particles decay
in triplets of head, tail and pivot and the tail-pairs of both phase
defect sites annihilate just as in the accumulation stage
Fig. &lt;a class="link" href="#fig:feynman:hiam:accumulation" &gt;7&lt;/a&gt;). Meanwhile, the
$\mathrm{h}^-$ of the large phase defect and the
$\mathrm{h}^+$ of the smaller phase defect annihilate
with each other just after
$t={4866~\mathrm{{m}{s}}}$, as well as their
respective $\mathrm{p}^-$ and
$\mathrm{p}^+$, merging the two phase defects into
one larger U-shaped phase defect line. At
$t={4890~\mathrm{{m}{s}}}$, a pair of pivots and
heads each with opposing charges remain. The pivots now have a distance
of ${(6.72\ ±\ 0.50)~\mathrm{{m}{m}}}$.&lt;/p&gt;
&lt;div id="fig:feynman:hiam:merge"&gt;
&lt;p&gt;&lt;img alt="The merger of two conduction blocks" class="gallery-image" data-flex-basis="210px" data-flex-grow="87" height="2406" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.merge.png" srcset="https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.merge_hu_44372d4d085f094.png 800w, https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.merge_hu_9897b3e6cc5b866d.png 1600w, https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.merge.png 2106w" width="2106"&gt;&lt;/p&gt;
&lt;p&gt;Figure 8: &lt;strong&gt;The merger of two conduction blocks&lt;/strong&gt; takes place when the
two phase defects grow close enough such that their particles annihilate
with each other, creating a larger phase defect line. This is another
intermediate step of figure-of-eight spiral formation in the optical
mapping experiment, Fig. &lt;a class="link" href="#fig:feynman:hiam" &gt;5&lt;/a&gt;D.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Finally, in Fig. &lt;a class="link" href="#fig:feynman:hiam:split" &gt;9&lt;/a&gt;, it can be seen how the
recovery of the initial zone of contact creates a shrink pair, which
causes the splitting of the conduction block line just before
$t={4902~\mathrm{{m}{s}}}$. Shortly after that, each
shrink particle decays into a pivot and tail. At
$t={4932~\mathrm{{m}{s}}}$, the system has evolved to
a state with two nearly parallel conduction block lines, i.e., phase
defects that comprise an effective functional isthmus around which a
figure-of-eight rotor pair can revolve. Each of the phase defects have a
head, a tail, and two pivot particles, all with the same charge. The
phase defect with a clockwise rotating rotor has
$Q=-1$ and $P=-1$, while the
counter-clockwise rotor has $Q=+1$ and
$P=+1$. From
$t={4956~\mathrm{{m}{s}}}$, the pivots remain in
place and the head and tail propagate along the phase defect line.
Zooming out, these particles behave like a pair of cores.&lt;/p&gt;
&lt;div id="fig:feynman:hiam:split"&gt;
&lt;p&gt;&lt;img alt="Splitting of a large conduction block" class="gallery-image" data-flex-basis="210px" data-flex-grow="87" height="2406" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.split.png" srcset="https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.split_hu_f1cd39ecf8ad854f.png 800w, https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.split_hu_d3a629956d5760b3.png 1600w, https://kabus.eu/2024/11/22/arno2024feynman/figures/hiam.split.png 2106w" width="2106"&gt;&lt;/p&gt;
&lt;p&gt;Figure 9: &lt;strong&gt;Splitting of a large conduction block&lt;/strong&gt; as the final step of
figure-of-eight spiral formation in the optical mapping experiment,
Fig. &lt;a class="link" href="#fig:feynman:hiam" &gt;5&lt;/a&gt;E. When a wave back meets the phase defect, a
pair of shrink particles is formed, halving the U-shaped phase defect
line with $Q=0$ and $P=0$. When
the shrink particles decay, two rotor cores with
$Q=\pm 1$ and $P=\pm 1$ are
formed.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In brief, the quasiparticle framework here reveals that the
establishment of the figure-of-eight re-entry is a multi-step process
that takes over ${800~\mathrm{{m}{s}}}$ to take
place. The process features tight interplay between dynamically changing
conduction blocks and wave front ends (heads). The formalism unifies the
concepts of rotors and conduction block lines, and reveals how an
initially flat conduction block line first takes a U-shape
($t={4890~\mathrm{{m}{s}}}$) and then becomes a
functional isthmus. The details of this interaction are not visible in
the classical phase singularity analysis, which would only reveal the
creation, vanishing, and recreation of a phase singularity pair.&lt;/p&gt;
&lt;div id="sec:feynman:discussion"&gt;
&lt;h1 id="discussion"&gt;Discussion
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:feynman:discussion:extension"&gt;&lt;/p&gt;
&lt;h2 id="an-extended-quasiparticle-viewpoint-on-excitation"&gt;An extended quasiparticle viewpoint on excitation
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The above analysis and examples show that complex excitation patterns
feature certain preserved special points. Noteworthily, these are
critical points in space, rather than critical points of evolution
equations, which also satisfy topological rules (&lt;a class="link" href="#ref-glass1975topological" &gt;Glass,
1975&lt;/a&gt;). While tips, pivots and cores have
been observed before, the growth and shrink quasiparticles emerge from
the framework itself. This situation is to a certain degree reminiscent
of the &amp;lsquo;Standard Model&amp;rsquo; in physics, which is based on a small set of
fundamental particles (&lt;a class="link" href="#ref-mann2010introduction" &gt;Mann, 2010&lt;/a&gt;) and
explains almost all experimental results in particle physics. The
theoretical framework presented in this work gains its power from simple
geometrical arguments, as the heads and tails are points where three
zones meet: excited, unexcited, and phase defect. The concept of &amp;lsquo;head&amp;rsquo;
itself has been implicitly used before, e.g. in Krinsky&amp;rsquo;s quantitative
theory of reverbators (&lt;a class="link" href="#ref-krinsky1968fibrillation" &gt;Krinsky, 1968&lt;/a&gt;;
&lt;a class="link" href="#ref-krinsky1992vortices" &gt;Krinsky et al., 1992&lt;/a&gt;) for inhomogeneous
domains. Our framework is much wider valid, as it can describe long and
short-lived rotors, wavelets and conduction blocks in homogeneous and
inhomogeneous excitable media.&lt;/p&gt;
&lt;div id="sec:feynman:cardions"&gt;
&lt;h2 id="cardions"&gt;Cardions
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In physics, it is customary to give localised and preserved structures a
name with the suffix &amp;lsquo;-on&amp;rsquo;, with the first part of the name referring to
the nature of the system of the (quasi-)particle (&lt;a class="link" href="#ref-mw:on" &gt;Merriam-Webster,
n.d.&lt;/a&gt;). Examples include not only most particles in the
Standard Model (proton, electron, baryon, fermion, photon) but also
other moving structures such as phonons, solitons and excitons. In
analogy, we here propose to name the here-identified quasiparticles as
&amp;lsquo;cardions&amp;rsquo;, as they were first observed in cardiac excitation patterns.&lt;/p&gt;
&lt;div id="sec:feynman:dynamical:transitions"&gt;
&lt;h2 id="dynamical-transitions"&gt;Dynamical transitions
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The motivation for this study was to investigate the interactions
between short-lived rotors and approaching wave fronts during
arrhythmogenesis (&lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et al., 2006&lt;/a&gt;). We go
beyond the observation that apparent phase singularities co-locate with
conduction blocks (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;; &lt;a class="link" href="#ref-rodrigo2017technical" &gt;Rodrigo et
al., 2017&lt;/a&gt;), by looking at a finer spatial
scale. We discovered multiple interactions of the cardions in the data
and represented them schematically. Our initial analyses show new
mechanistic insight, like the dynamical isthmus formation in
Fig. &lt;a class="link" href="#fig:feynman:hiam:split" &gt;9&lt;/a&gt;. It can be expected that the automated
construction of those diagrams for larger fibrillation domains (see
Fig. &lt;a class="link" href="#fig:feynman:hiam" &gt;5&lt;/a&gt;) will allow an enhanced classification and
characterisation of those patterns.&lt;/p&gt;
&lt;div id="sec:feynman:particle:physics"&gt;
&lt;h2 id="links-between-particle-physics-and-cardiology"&gt;Links between particle physics and cardiology
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The quasiparticle viewpoint allows us to introduce more concepts from
particle physics in the world of excitable media. First, note that the
terms &amp;lsquo;creation&amp;rsquo; and &amp;lsquo;annihilation&amp;rsquo; also applied to the classical
viewpoint (&lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et al., 2006&lt;/a&gt;; &lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al.,
1998&lt;/a&gt;). There, a single quasiparticle was present,
i.e., the spiral wave centre (phase singularity), bearing a positive or
negative charge ($Q=\pm 1$) depending on its rotation
sense. In our viewpoint, creation and annihilation also occurs with
heads, tails and pivots. Since cardiac tissue is, in reality,
non-homogeneous, a wave front will often create a head pair near
obstacles, e.g. areas of fibrosis, which annihilates shortly afterwards.
Second, the difference between linear-core and circular-core rotors
follows from the mutual interaction between pivots, which can be
expressed with spiral wave response functions (&lt;a class="link" href="#ref-biktasheva2003wave" &gt;Biktasheva &amp;amp; Biktashev,
2003&lt;/a&gt;; &lt;a class="link" href="#ref-dierckx2017measurement" &gt;Dierckx et al.,
2017&lt;/a&gt;; &lt;a class="link" href="#ref-marcotte2016adjoint" &gt;Marcotte &amp;amp; Grigoriev,
2016&lt;/a&gt;). If nearby pivot charges of the same
charge attract each other, they form a core particle. Conversely, when
they repel each other, a linear-core rotor emerges. However, such a
phase defect cannot grow larger than the width of a travelling pulse in
the medium, since otherwise, the defect line will break by the creation
of a new $\mathrm{p}_+$,
$\mathrm{p}_-$ pair. Therefore, pivot particles are
in our opinion subjected to confinement, analogous to quarks in quantum
chromodynamics (&lt;a class="link" href="#ref-wilson1974confinement" &gt;K. G. Wilson, 1974&lt;/a&gt;). This
confinement may partially explain why the here-identified quasiparticles
remained unnoticed during simple dynamical regimes, i.e., at time
intervals where no new vortices or conduction blocks form or disappear.&lt;/p&gt;
&lt;p&gt;Finally, we note that in Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;B, there are two
apparent symmetries. First, if one exchanges excited with unexcited
regions, wave fronts become wave backs, heads become tails and vice
versa. This corresponds to flipping the voltage axis around the value
$V_*$ from Eq. &lt;a class="link" href="#eq:feynman:phi:act" &gt;1&lt;/a&gt;. Second, one
can reverse the arrow of time, which preserves
$\mathrm{U}$ and $\mathrm{E}$
regions, but interchanges wave backs with fronts and heads with tails.
However, when looking at the dynamics, there is a clear distinction
between heads and tails. As heads lie on a wave front, they move at the
conduction velocity in the medium. Since the repolarisation of the
tissue occurs at a fixed delay after the depolarisation, the wave back
is a phase wave, and wave backs and tails can move at any speed. Also,
the medium can remain in the unexcited state for a unlimited time but
only a limited time in the excited state. This effective breaking of
symmetry also manifests in the growth and decay states. In the cases we
have yet observed in simulations and experiment, the growth of a phase
defect line each time involved the three different quasiparticles.
Namely, a conduction block arises when a wave front (h) hits a wave back
(t) and in the process, a phase defect is formed (p). Conversely, the
vanishing of a phase defect only requires that the phases at both sides
return to full recovery. We took the threshold of the wave back to mark
the state where a standard impeding wave front can re-excite the tissue.
Then, only a tail and pivot particle are needed. In case of a
heterogeneous medium, we anticipate that also other situations can
occur, but these fall outside the scope of our present investigation.
Noteworthily, a statistical analysis of occurring processes in the
topological approach of Marcotte &amp;amp; Grigoriev
(&lt;a class="link" href="#ref-marcotte2017dynamical" &gt;2017&lt;/a&gt;) also demonstrated asymmetry between
favoured processes in the creation and annihilation processes of spiral
cores.&lt;/p&gt;
&lt;div id="sec:feynman:limitations"&gt;
&lt;h2 id="limitations"&gt;Limitations
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The parallels drawn here between biological excitation and theoretical
physics are only at the conceptual level. Feynman diagrams in physics
are representations of a path integral, allowing to structure tedious
calculations. To use the diagrams in excitable context for quantitative
calculations and predictions could be a next research step. Even then,
the mathematical implications will be different from the physics case.
For this reason, we refer to the diagrams here consistently as
&amp;lsquo;Feynman-like&amp;rsquo;. Likewise, the terms of confinement, quasiparticle
interaction, standard model and symmetry breaking are powerful analogues
when used in complex systems, but will at a more detailed level have
different meaning than their original physics use.&lt;/p&gt;
&lt;p&gt;The local state of a cell was here assumed to lie along a cycle, such
that it can be labelled with a single phase variable
$\varphi({{\bm{{r}}}},t)$. Capturing specific memory
effects, such as alternans (&lt;a class="link" href="#ref-karma1994electrical" &gt;Karma, 1994&lt;/a&gt;) or
after-depolarisations in cardiac tissue (&lt;a class="link" href="#ref-weiss2010early" &gt;Weiss et al.,
2010&lt;/a&gt;) will require an extension of the formalism,
e.g. using phase-amplitude equations (&lt;a class="link" href="#ref-wilson2020phase" &gt;D. Wilson,
2020&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We are also not certain if all possible cardions states have been
described here. We already noted that phase defects can have side
branches, and the &amp;lsquo;joints&amp;rsquo; where this happens will also be cardions, to
be described elsewhere. In Fig. &lt;a class="link" href="#fig:feynman:hiam:merge" &gt;8&lt;/a&gt;,
co-localisation of a $\mathrm{h}$ and a
$\mathrm{p}$ particle is seen in the frames. However,
in our experience this state is transient and therefore not considered a
bound state here. Nonetheless, it is possible that other regimes exist
where $\mathrm{h}$-$\mathrm{p}$
pairs may travel together as a bound state.&lt;/p&gt;
&lt;p&gt;The concept of $P$-charge was introduced in this
work, and our understanding of it is currently incomplete. The
$P$-charge is currently undefined before the first
wave crosses the medium. The precise conditions under which it is
conserved or not need to be further elucidated. For isolated, thin,
conduction block lines, $P$-charge seems to be
conserved: Basic features in the patterns observed are linear rotor
cores ($P=\pm 1$) or mere conduction blocks
($P=0$).&lt;/p&gt;
&lt;p&gt;Finally, we have applied the framework here already on in-silico and
in-vitro datasets. An obvious next step would be to also analyse surface
patterns in cardiac tissues, and to post-process phase maps or LAT maps
obtained in patients. We encourage the scientific community to work
together on these steps and are providing basic numerical methods for
this on GitLab, see below. We are currently working on automated
algorithms to detect cardions in datasets.&lt;/p&gt;
&lt;div id="sec:feynman:app"&gt;
&lt;h2 id="applications-to-cardiac-arrhythmia"&gt;Applications to cardiac arrhythmia
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The above examples revealed dynamics at a finer level than in the phase
singularity picture. Conducting similar analyses on existing datasets
during arrhythmias is likely to give new clues on underlying mechanisms.
More specifically, counting the elementary interactions (&lt;a class="link" href="#ref-marcotte2017dynamical" &gt;Marcotte &amp;amp;
Grigoriev, 2017&lt;/a&gt;), computing statistics of
potentially large diagrams, and deriving interaction laws between the
quasiparticles could prove useful. The value of the
$P$-charge for obstacles in the medium could also
serve as a &amp;lsquo;distance&amp;rsquo; to the rotor regime, and thus quantify how far a
regime is from arrhythmia, complementing other risk scores in literature
(&lt;a class="link" href="#ref-arevalo2016arrhythmia" &gt;Arevalo et al., 2016&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The pivot sites, here identified as quasiparticles, are actively being
investigated by clinicians as possible ablation targets (&lt;a class="link" href="#ref-seitz2017wholly" &gt;Seitz et al.,
2017&lt;/a&gt;). We believe that the analysis of the
clinical data and the pivot ablation within our framework could help to
answer if, why, and when these points are appropriate ablation targets.&lt;/p&gt;
&lt;div id="sec:feynman:outlook"&gt;
&lt;h2 id="outlook"&gt;Outlook
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In this manuscript, we have exposed several new concepts, such as the
pivot charge, different quasiparticles and a diagrammatic approach to
better understand their interactions. Continuing research by ourselves
and colleagues will be needed to elaborate these concepts.&lt;/p&gt;
&lt;p&gt;Within the context of continuous excitable media, several extensions are
possible. Since we do not suppose an underlying evolution model, the
analysis could also be performed to the surface of three-dimensional
media. A next step is to analyse optical voltage mapping surface
recordings of the heart muscle. Such analysis can be applied to any
excitable surface pattern that is sufficiently sampled in space and
time. Our original motivation is to perform predictive calculations in
those patterns: Can one find the critical size of a wave break, or the
timescale at which a rotor produces multiple wavelets? In three spatial
dimensions, our preliminary findings (&lt;a class="link" href="#ref-arno2024strings" &gt;Arno et al.,
2024b&lt;/a&gt;) indicate that the cardions become
string-like objects (&lt;a class="link" href="#ref-verschelde2007covariant" &gt;Verschelde et al.,
2007&lt;/a&gt;). As such, cardions in three
dimensions will refine the concept of a rotor filament (&lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et al.,
2006&lt;/a&gt;; &lt;a class="link" href="#ref-winfree1973scroll" &gt;Winfree, 1973&lt;/a&gt;),
and may be used in the future to further investigate the
three-dimensional organisation of turbulence in complex systems.&lt;/p&gt;
&lt;div id="sec:feynman:conclusion"&gt;
&lt;h1 id="conclusion"&gt;Conclusion
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;We presented a conceptual framework revising the classical theory of
excitable media, intentionally designed for complex regimes: short-lived
pivoting motion and prominent conduction blocks. By classifying the
endpoints of wave fronts, wave backs, and conduction blocks as charged
quasiparticles, Feynman-like diagrams can be created from phase maps or
local activation times. We believe this framework has the potential to
become a useful analysis tool in excitable media, with applications
within and beyond the cardiac electrophysiology context.&lt;/p&gt;
&lt;div id="sec:feynman:methods"&gt;
&lt;h1 id="methods"&gt;Methods
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:feynman:in:silico:data"&gt;&lt;/p&gt;
&lt;h2 id="in-silico-data-generation"&gt;&lt;em&gt;In silico&lt;/em&gt; data generation
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The synthetic data from Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;A were obtained by
Euler-forward stepping of the Bueno-Orovio-Cherry-Fenton model
(&lt;a class="link" href="#ref-bueno2008model" &gt;Bueno-Orovio et al., 2008&lt;/a&gt;), with
finite-differences grid size ${0.5~\mathrm{{m}{m}}}$
and time step ${0.1~\mathrm{{m}{s}}}$ in a
biventricular heart geometry using an S1S2 stimulation protocol in the
Ithildin framework (&lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus et al., 2024&lt;/a&gt;). The
data from Fig. &lt;a class="link" href="#fig:feynman:intro" &gt;1&lt;/a&gt;B are obtained in the same way but
for a square piece of tissue with grid size
${0.3~\mathrm{{m}{m}}}$. For the fibrillation-like
data from Fig. &lt;a class="link" href="#fig:feynman:smooka_creation" &gt;4&lt;/a&gt;, the
Karma model (&lt;a class="link" href="#ref-karma1993spiral" &gt;Karma, 1993&lt;/a&gt;,
&lt;a class="link" href="#ref-karma1994electrical" &gt;1994&lt;/a&gt;) modified according to Marcotte &amp;amp;
Grigoriev (&lt;a class="link" href="#ref-marcotte2017dynamical" &gt;2017&lt;/a&gt;) was used, with step size
${1~\mathrm{{m}{m}}}$ and time step
${0.1~\mathrm{{m}{s}}}$.&lt;/p&gt;
&lt;div id="sec:feynman:in:vitro:data"&gt;
&lt;h2 id="in-vitro-data-generation"&gt;&lt;em&gt;In vitro&lt;/em&gt; data generation
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Monolayers of fully functional human atrial myocytes were generated as
described in detail by Harlaar et al. (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;2022&lt;/a&gt;). A
voltage-sensitive dye was added to the culture, after which a real-time
recording can be made of the intensity of emitted light, which is a
measure of the local transmembrane potential (&lt;a class="link" href="#ref-salama1987maps" &gt;Salama et al.,
1987&lt;/a&gt;). The recording has a resolution of
$100 \times 100$ pixels with pixel size
${0.25~\mathrm{{m}{m}}}$. The sampling time between
frames was ${6~\mathrm{{m}{s}}}$.&lt;/p&gt;
&lt;div id="sec:feynman:data:analysis"&gt;
&lt;h2 id="data-analysis"&gt;Data analysis
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Local activation times were converted to phase following
Eq. &lt;a class="link" href="#eq:feynman:phi:lin" &gt;3&lt;/a&gt; with time constant
$\tau_0 = {110~\mathrm{{m}{s}}}$ for the &lt;em&gt;in vitro&lt;/em&gt;
data and ${70~\mathrm{{m}{s}}}$ for the in-silico
data. We use the phase values
$\varphi_\mathrm{F} = {0~\mathrm{rad}}$ and
$\varphi_\mathrm{B} = {5~\mathrm{rad}}$. Phase
defects are identified following Eq. &lt;a class="link" href="#eq:feynman:Z" &gt;5&lt;/a&gt; with the
threshold $\rho_* = 0.2$. The positions of tips,
heads, tails, pivots and compound particles were drawn manually on the
resulting figures.&lt;/p&gt;
&lt;div id="sec:feynman:data:availability"&gt;
&lt;h2 id="data-availability"&gt;Data availability
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The simulation output and pre-processed optical voltage mapping data we
have used for this article can be found on &lt;a class="link" href="https://doi.org/10.5281/zenodo.13379783" target="_blank" rel="noopener"
 &gt;Zenodo (DOI:
10.5281/zenodo.13379783)&lt;/a&gt;. This
repository also contains the scripts and Python modules to generate the
figures found in this article. The source code for the Ithildin
finite-differences solver (&lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus et al., 2024&lt;/a&gt;)
(&lt;a class="link" href="https://gitlab.com/heartkor/ithildin" target="_blank" rel="noopener"
 &gt;https://gitlab.com/heartkor/ithildin&lt;/a&gt;), its Python module (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et
al., 2022&lt;/a&gt;)
(&lt;a class="link" href="https://gitlab.com/heartkor/py_ithildin" target="_blank" rel="noopener"
 &gt;https://gitlab.com/heartkor/py_ithildin&lt;/a&gt;), and a Python module to
create the Feynman-like diagrams
(&lt;a class="link" href="https://gitlab.com/heartkor/pdl-feynman" target="_blank" rel="noopener"
 &gt;https://gitlab.com/heartkor/pdl-feynman&lt;/a&gt;) can also be found on GitLab.&lt;/p&gt;
&lt;div &gt;
&lt;h1 id="addenda"&gt;Addenda
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Acknowledgments:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The authors are grateful to D.A. Pijnappels, A.A.F. de Vries and N.
Harlaar for collecting and sharing the hiAM dataset. The authors thank
J. Ector and T. De Coster for helpful discussions. The authors thank
A.A.F. de Vries for useful comments on the manuscript. The authors thank
A. Gobeyn for coining the term &amp;lsquo;cardion&amp;rsquo; for the collection of
quasiparticles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Funding:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L. Arno is funded by a FWO-Flanders fellowship, grant 117702N. D. Kabus
is supported by KU Leuven grant GPUL/20/012. H. Dierckx was supported by
KU Leuven grant STG/019/007.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Competing interests:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The authors declare no competing interests.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Copyright:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Open Access:&lt;/strong&gt; This article is licensed under a Creative Commons
Attribution 4.0 International License, which permits use, sharing,
adaptation, distribution and reproduction in any medium or format, as
long as you give appropriate credit to the original author(s) and the
source, provide a link to the Creative Commons licence, and indicate if
changes were made. The images or other third party material in this
article are included in the article&amp;rsquo;s Creative Commons licence, unless
indicated otherwise in a credit line to the material. If material is not
included in the article&amp;rsquo;s Creative Commons licence and your intended use
is not permitted by statutory regulation or exceeds the permitted use,
you will need to obtain permission directly from the copyright holder.
To view a copy of this licence, visit
&lt;a class="link" href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noopener"
 &gt;https://creativecommons.org/licenses/by/4.0/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Author contributions:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LA:&lt;/strong&gt;
Conceptualisation, Methodology, Software, Validation, Formal analysis, Investigation, Data curation, Writing &amp;ndash; original draft, Writing &amp;ndash; review &amp;amp; editing, Visualisation. &lt;strong&gt;DK:&lt;/strong&gt;
Conceptualisation, Methodology, Software, Validation, Formal analysis, Investigation, Writing &amp;ndash; original draft, Writing &amp;ndash; review &amp;amp; editing, Visualisation. &lt;strong&gt;HD:&lt;/strong&gt;
Conceptualisation, Methodology, Resources, Writing &amp;ndash; original draft, Writing &amp;ndash; review &amp;amp; editing, Supervision, Project administration, Funding acquisition.
&lt;div &gt;&lt;/p&gt;
&lt;h1 id="references"&gt;References
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="refs" class="references csl-bib-body hanging-indent" entry-spacing="0" line-spacing="2"&gt;
&lt;div id="ref-allessie1973circus" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Allessie, M. A., Bonke, F. I. M., &amp;amp; Schopman, F. J. G. (1973). Circus
movement in rabbit atrial muscle as a mechanism of tachycardia.
&lt;em&gt;Circulation Research&lt;/em&gt;, &lt;em&gt;33&lt;/em&gt;(1), 54&amp;ndash;62.
&lt;a class="link" href="https://doi.org/10.1161/01.RES.33.1.54" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.RES.33.1.54&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-aras2017ventricular" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Aras, K. K., Kay, M. W., &amp;amp; Efimov, I. R. (2017). Ventricular
fibrillation: Rotors or foci? both! &lt;em&gt;Circulation: Arrhythmia and
Electrophysiology&lt;/em&gt;, &lt;em&gt;10&lt;/em&gt;(12), e006011.
&lt;a class="link" href="https://doi.org/10.1161/circep.117.006011" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/circep.117.006011&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arevalo2016arrhythmia" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arevalo, H. J., Vadakkumpadan, F., Guallar, E., Jebb, A., Malamas, P.,
Wu, K. C., &amp;amp; Trayanova, N. A. (2016). Arrhythmia risk stratification of
patients after myocardial infarction using personalized heart models.
&lt;em&gt;Nature Communications&lt;/em&gt;, &lt;em&gt;7&lt;/em&gt;(1), 11437.
&lt;a class="link" href="https://doi.org/10.1038/ncomms11437" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/ncomms11437&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arno2024feynman" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arno, L., Kabus, D., &amp;amp; Dierckx, H. (2024a). Analysis of complex
excitation patterns using
&lt;span class="nocase"&gt;Feynman-like&lt;/span&gt;
diagrams. &lt;em&gt;Scientific Reports&lt;/em&gt;, &lt;em&gt;14&lt;/em&gt;(1), 28962.
&lt;a class="link" href="https://doi.org/10.1038/s41598-024-73544-z" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41598-024-73544-z&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arno2024strings" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arno, L., Kabus, D., &amp;amp; Dierckx, H. (2024b). Strings, branes and
twistons: Topological analysis of phase defects in excitable media such
as the heart. In &lt;em&gt;arXiv preprint arXiv:2401.02571&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.48550/arXiv.2401.02571" target="_blank" rel="noopener"
 &gt;https://doi.org/10.48550/arXiv.2401.02571&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arno2021phase" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arno, L., Quan, J., Nguyen, N. T., Vanmarcke, M., Tolkacheva, E. G., &amp;amp;
Dierckx, H. (2021). A phase defect framework for the analysis of cardiac
arrhythmia patterns. &lt;em&gt;Frontiers in Physiology&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.3389/fphys.2021.690453" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fphys.2021.690453&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-biktashev1994tension" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Biktashev, V. N., Holden, A. V., &amp;amp; Zhang, H. (1994). Tension of
organizing filaments of scroll waves. &lt;em&gt;Philosophical Transactions of the
Royal Society of London. Series A: Physical and Engineering Sciences&lt;/em&gt;,
&lt;em&gt;347&lt;/em&gt;(1685), 611&amp;ndash;630. &lt;a class="link" href="https://doi.org/10.1098/rsta.1994.0070" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1098/rsta.1994.0070&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-biktasheva2003wave" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Biktasheva, I. V., &amp;amp; Biktashev, V. N. (2003). Wave-particle dualism of
spiral waves dynamics. &lt;em&gt;Physical Review E&lt;/em&gt;, &lt;em&gt;67&lt;/em&gt;(2), 026221.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevE.67.026221" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevE.67.026221&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bray2003examination" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bray, M.-A., &amp;amp; Wikswo, J. P. (2003). Examination of optical depth
effects on fluorescence imaging of cardiac propagation. &lt;em&gt;Biophys. J.&lt;/em&gt;,
&lt;em&gt;85&lt;/em&gt;, 4134&amp;ndash;4145. &lt;a class="link" href="https://doi.org/10.1016/S0006-3495%2803%2974825-5" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/S0006-3495(03)74825-5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bueno2008model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bueno-Orovio, A., Cherry, E. M., &amp;amp; Fenton, F. H. (2008). Minimal model
for human ventricular action potentials in tissue. &lt;em&gt;Journal of
Theoretical Biology&lt;/em&gt;, &lt;em&gt;253&lt;/em&gt;(3), 544&amp;ndash;560.
&lt;a class="link" href="https://doi.org/10.1016/j.jtbi.2008.03.029" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jtbi.2008.03.029&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cannon2014neurosystems" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cannon, J., McCarthy, M. M., Lee, S., Lee, J., Börgers, C., Whittington,
M. A., &amp;amp; Kopell, N. (2014). Neurosystems: Brain rhythms and cognitive
processing. &lt;em&gt;European Journal of Neuroscience&lt;/em&gt;, &lt;em&gt;39&lt;/em&gt;(5), 705&amp;ndash;719.
&lt;a class="link" href="https://doi.org/10.1111/ejn.12453" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1111/ejn.12453&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-christoph2018electromechanical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Christoph, J., Chebbok, M., Richter, C., Schroder-Schetelig, J.,
Bittihn, P., Stein, S., Uzelac, I., Fenton, F. H., Hasenfuss, G.,
Gilmour, R. F., &amp;amp; Luther, S. (2018). Electromechanical vortex filaments
during cardiac fibrillation. &lt;em&gt;Nature&lt;/em&gt;, &lt;em&gt;555&lt;/em&gt;, 667&amp;ndash;672.
&lt;a class="link" href="https://doi.org/10.1038/nature26001" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/nature26001&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clayton2011review" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clayton, R., Bernus, O., Cherry, E. M., Dierckx, H., Fenton, F. H.,
Mirabella, L., Panfilov, A. V., Sachse, F. B., Seemann, G., &amp;amp; Zhang, H.
(2011). Models of cardiac tissue electrophysiology: Progress, challenges
and open questions. &lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;,
&lt;em&gt;104&lt;/em&gt;(1-3), 22&amp;ndash;48. &lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2010.05.008" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2010.05.008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clayton2006phase" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clayton, R., Zhuchkova, E., &amp;amp; Panfilov, A. (2006). Phase singularities
and filaments:
&lt;span &gt;Simplifying&lt;/span&gt;
complexity in computational models of ventricular fibrillation.
&lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;, &lt;em&gt;90&lt;/em&gt;(1-3), 378&amp;ndash;398.
&lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2005.06.011" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2005.06.011&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cronin20192019" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cronin, E. M., Bogun, F. M., Maury, P., Peichl, P., Chen, M.,
Namboodiri, N., Aguinaga, L., Leite, L. R., Al-Khatib, S. M., Anter, E.,
Berruezo, A., Callans, D. J., Chung, M. K., Cuculich, P., d&amp;rsquo;Avila, A.,
Deal, B. J., Della Bella, P., Deneke, T., Dickfeld, T.-M., Hadid, C.,
Haqqani, H. M., Kay, G. N., Latchamsetty, R., Marchlinski, F., Miller,
J. M., Nogami, A., Patel, A. R., Pathak, R. K., Sáenz Morales, L. C.,
Santangeli, P., Sapp, J. L., Sarkozy, A., Soejima, K., Stevenson, W. G.,
Tedrow, U. B., Tzou, W. S., Varma, N., Zeppenfeld, K., ESC Scientific
Document Group, Asirvatham, S. J., Sternick, E. B., Chyou, J., Ernst,
S., Fenelon, G., Gerstenfeld, E. P., Hindricks, G., Inoue, K., Kim, J.
J., Krishnan, K., Kuck, K.-H., Avalos, M. O., Paul, T., Scanavacca, M.
I., Tung, R., Voss, J., Yamada, T., &amp;amp; Yamane, T. (2019). 2019
&lt;span &gt;HRS&lt;/span&gt;/&lt;span &gt;EHRA&lt;/span&gt;/&lt;span &gt;APHRS&lt;/span&gt;/&lt;span &gt;LAHRS&lt;/span&gt;
expert consensus statement on catheter ablation of ventricular
arrhythmias. &lt;em&gt;EP Europace&lt;/em&gt;, &lt;em&gt;21&lt;/em&gt;(8), 1143&amp;ndash;1144.
&lt;a class="link" href="https://doi.org/10.1093/europace/euz132" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1093/europace/euz132&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-dierckx2017measurement" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Dierckx, H., Verschelde, H., &amp;amp; Panfilov, A. V. (2017). Measurement and
structure of spiral wave response functions. &lt;em&gt;Chaos: An
Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;27&lt;/em&gt;(9).
&lt;a class="link" href="https://doi.org/10.1063/1.4999606" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.4999606&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fenton2008models" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Fenton, F. H., &amp;amp; Cherry, E. M. (2008). Models of cardiac cell.
&lt;em&gt;Scholarpedia&lt;/em&gt;, &lt;em&gt;3&lt;/em&gt;(8), 1868.
&lt;a class="link" href="https://doi.org/10.4249/scholarpedia.1868" target="_blank" rel="noopener"
 &gt;https://doi.org/10.4249/scholarpedia.1868&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fenton1998vortex" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Fenton, F. H., &amp;amp; Karma, A. (1998). Vortex dynamics in three-dimensional
continuous myocardium with fiber rotation: Filament instability and
fibrillation. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;(1), 20&amp;ndash;47. &lt;a class="link" href="https://doi.org/10.1063/1.166311" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166311&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-feynman1949theory" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Feynman, R. P. (1949). The theory of positrons. &lt;em&gt;Physical Review&lt;/em&gt;, &lt;em&gt;76&lt;/em&gt;,
749&amp;ndash;759. &lt;a class="link" href="https://doi.org/10.1103/PhysRev.76.749" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRev.76.749&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-glass1975topological" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Glass, L. (1975). A topological theorem for nonlinear dynamics in
chemical and ecological networks. &lt;em&gt;Proc. Natl. Acad. Sci. U.S.A.&lt;/em&gt;,
&lt;em&gt;72&lt;/em&gt;(8), 2856&amp;ndash;2857. &lt;a class="link" href="https://doi.org/10.1073/pnas.72.8.2856" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1073/pnas.72.8.2856&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gray1995mechanisms" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gray, R. A., Jalife, J., Panfilov, A. V., Baxter, W. T., Cabo, C.,
Davidenko, J. M., &amp;amp; Pertsov, A. M. (1995). Mechanisms of cardiac
fibrillation. &lt;em&gt;Science&lt;/em&gt;, &lt;em&gt;270&lt;/em&gt;(5239), 1222&amp;ndash;1223.
&lt;a class="link" href="https://doi.org/10.1126/science.270.5239.1222" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1126/science.270.5239.1222&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gray1998spatial" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gray, R. A., Pertsov, A. M., &amp;amp; Jalife, J. (1998). Spatial and temporal
organization during cardiac fibrillation. &lt;em&gt;Nature&lt;/em&gt;, &lt;em&gt;392&lt;/em&gt;(6671), 75&amp;ndash;78.
&lt;a class="link" href="https://doi.org/10.1038/32164" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/32164&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-haissaguerre1998spontaneous" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Haissaguerre, M., Jais, P., Shah, D., Takahashi, A., Hocini, M.,
Quiniou, G., Garrigue, S., Le Mouroux, A., P, L. M., &amp;amp; J, C. (1998).
Spontaneous initiation of atrial fibrillation by ectopic beats
originating in the pulmonary veins. &lt;em&gt;New England Journal of Medicine&lt;/em&gt;,
&lt;em&gt;339&lt;/em&gt;, 659&amp;ndash;666. &lt;a class="link" href="https://doi.org/10.1056/nejm199809033391003" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1056/nejm199809033391003&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-harlaar2022hiam" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Harlaar, N., Dekker, S. O., Zhang, J., Snabel, R. R., Veldkamp, M. W.,
Verkerk, A. O., Fabres, C. C., Schwach, V., Lerink, L. J. S., Rivaud, M.
R., Mulder, A. A., Corver, W. E., Goumans, M. J. T. H., Dobrev, D.,
Klautz, R. J. M., Schalij, M. J., Veenstra, G. J. C., Passier, R.,
Brakel, T. J. van, Pijnappels, D. A., &amp;amp; Vries, A. A. F. de. (2022).
Conditional immortalization of human atrial myocytes for the generation
of in vitro models of atrial fibrillation. &lt;em&gt;Nature Biomedical
Engineering&lt;/em&gt;, &lt;em&gt;6&lt;/em&gt;(4), 389&amp;ndash;402.
&lt;a class="link" href="https://doi.org/10.1038/s41551-021-00827-5" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41551-021-00827-5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-henry2000linear" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Henry, H., &amp;amp; Hakim, V. (2000). Linear stability of scroll waves.
&lt;em&gt;Physical Review Letters&lt;/em&gt;, &lt;em&gt;85&lt;/em&gt;(25), 5328.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevLett.85.5328" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevLett.85.5328&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-holland1977solid" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Holland, R. P., &amp;amp; Arnsdorf, M. F. (1977). Solid angle theory and the
electrocardiogram: Physiologic and quantitative interpretations.
&lt;em&gt;Progress in Cardiovascular Diseases&lt;/em&gt;, &lt;em&gt;19&lt;/em&gt;(6), 431&amp;ndash;457.
&lt;a class="link" href="https://doi.org/10.1016/0033-0620%2877%2990009-3" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0033-0620(77)90009-3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-jalife1998self" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Jalife, J., Gray, R. A., Moeley, G. E., &amp;amp; Davidenko, J. M. (1998).
Self-organization and the dynamical nature of ventricular fibrillation.
&lt;em&gt;Chaos&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;, 79&amp;ndash;93. &lt;a class="link" href="https://doi.org/10.1063/1.166289" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166289&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-janse1980flow" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Janse, M. J., van Capelle, F. J. L., Morsink, H., Kleber, A. G.,
Wilms-Schopman, F. J. G., Cardinal, R., Naumann D&amp;rsquo;Alnoncourt, C., &amp;amp;
Durrer, D. (1980). Flow of injury current and patterns of excitation
during early ventricular arrhythmias in acute regional myocardial
ischemia in isolated porcine and canine hearts.
&lt;span &gt;Evidence&lt;/span&gt; for 2
different arrhythmogenic mechanisms. &lt;em&gt;Circulation Research&lt;/em&gt;, &lt;em&gt;47&lt;/em&gt;,
151&amp;ndash;165. &lt;a class="link" href="https://doi.org/10.1161/01.RES.47.2.151" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.RES.47.2.151&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2022numerical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Arno, L., Leenknegt, L., Panfilov, A. V., &amp;amp; Dierckx, H.
(2022). Numerical methods for the detection of phase defect structures
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;(7), 1&amp;ndash;31.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0271351" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0271351&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2024ithildin" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Cloet, M., Zemlin, C., Bernus, O., &amp;amp; Dierckx, H. (2024). The
&lt;span &gt;Ithildin&lt;/span&gt; library for
efficient numerical solution of anisotropic reaction-diffusion problems
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;19&lt;/em&gt;(9), 1&amp;ndash;26.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0303674" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0303674&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kapral1995chemical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kapral, R., &amp;amp; Showalter, R. (1995). &lt;em&gt;Chemical waves and patterns&lt;/em&gt;.
Kluwer.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-karma1993spiral" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Karma, A. (1993). Spiral breakup in model equations of action potential
propagation in cardiac tissue. &lt;em&gt;Physical Review Letters&lt;/em&gt;, &lt;em&gt;71&lt;/em&gt;(7), 1103.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevLett.71.1103" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevLett.71.1103&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-karma1994electrical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Karma, A. (1994). Electrical alternans and spiral wave breakup in
cardiac tissue. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;4&lt;/em&gt;(3), 461&amp;ndash;472. &lt;a class="link" href="https://doi.org/10.1063/1.166024" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166024&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-keener1988dynamics" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Keener, J. P. (1988). The dynamics of three-dimensional scroll waves in
excitable media. &lt;em&gt;Physica D: Nonlinear Phenomena&lt;/em&gt;, &lt;em&gt;31&lt;/em&gt;(2), 269&amp;ndash;276.
&lt;a class="link" href="https://doi.org/10.1016/0167-2789%2888%2990080-2" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0167-2789(88)90080-2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-krinsky1966spread" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Krinsky, V. I. (1966). Spread of excitation in an inhomogeneous medium
(state similar to cardiac fibrillation). &lt;em&gt;Biophysics&lt;/em&gt;, &lt;em&gt;11&lt;/em&gt;, 776&amp;ndash;784.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-krinsky1968fibrillation" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Krinsky, V. I. (1968). Fibrillation in excitable media. &lt;em&gt;Problemy
Kibernetiki&lt;/em&gt;, &lt;em&gt;20&lt;/em&gt;, 59&amp;ndash;73.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-krinsky1992vortices" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Krinsky, V. I., Efimov, I. R., &amp;amp; Jalife, J. (1992). Vortices with linear
cores in excitable media. &lt;em&gt;Proceedings of the Royal Society of London.
Series A: Mathematical and Physical Sciences&lt;/em&gt;, &lt;em&gt;437&lt;/em&gt;(1901), 645&amp;ndash;655.
&lt;a class="link" href="https://doi.org/10.1098/rspa.1992.0084" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1098/rspa.1992.0084&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kuklik2016identification" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kuklik, P., Zeemering, S., van Hunnik, A., Maesen, B., Pison, L., Lau,
D. H., Maessen, J., Podziemski, P., Meyer, C., Schäffer, B., et al.
(2016). Identification of rotors during human atrial fibrillation using
contact mapping and phase singularity detection: Technical
considerations. &lt;em&gt;IEEE Transactions on Biomedical Engineering&lt;/em&gt;, &lt;em&gt;64&lt;/em&gt;(2),
310&amp;ndash;318. &lt;a class="link" href="https://doi.org/10.1109/tbme.2016.2554660" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/tbme.2016.2554660&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-lechleiter1991spiral" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Lechleiter, J., Girard, S., Peralta, E., &amp;amp; Clapham, D. (1991). Spiral
calcium wave propagation and annihilation in xenopus laevis oocytes.
&lt;em&gt;Science&lt;/em&gt;, &lt;em&gt;252&lt;/em&gt;(5002), 123&amp;ndash;126.
&lt;a class="link" href="https://doi.org/10.1126/science.2011747" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1126/science.2011747&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-lee2020reconsidering" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Lee, S., Khrestian, C. M., Sahadevan, J., &amp;amp; Waldo, A. L. (2020).
Reconsidering the multiple wavelet hypothesis of atrial fibrillation.
&lt;em&gt;Heart Rhythm&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;(11), 1976&amp;ndash;1983.
&lt;a class="link" href="https://doi.org/10.1016/j.hrthm.2020.06.017" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.hrthm.2020.06.017&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-mann2010introduction" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Mann, R. (2010). &lt;em&gt;An introduction to particle physics and the standard
model&lt;/em&gt;. CRC Press. &lt;a class="link" href="https://doi.org/10.1201/9781420083002" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1201/9781420083002&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-marcotte2016adjoint" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Marcotte, C. D., &amp;amp; Grigoriev, R. O. (2016). Adjoint eigenfunctions of
temporally recurrent single-spiral solutions in a simple model of atrial
fibrillation. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;26&lt;/em&gt;(9), 093107. &lt;a class="link" href="https://doi.org/10.1063/1.4962644" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.4962644&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-marcotte2017dynamical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Marcotte, C. D., &amp;amp; Grigoriev, R. O. (2017). Dynamical mechanism of
atrial fibrillation: A topological approach. &lt;em&gt;Chaos: An
Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;27&lt;/em&gt;(9).
&lt;a class="link" href="https://doi.org/10.1063/1.5003259" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.5003259&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-mw:on" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Merriam-Webster. (n.d.). -on &amp;ndash; noun suffix (2). In
&lt;em&gt;&lt;span class="nocase"&gt;Merriam-Webster.com&lt;/span&gt;
dictionary&lt;/em&gt;. Retrieved April 26, 2024, from
&lt;a class="link" href="https://www.merriam-webster.com/dictionary/-on#dictionary-entry-6" target="_blank" rel="noopener"
 &gt;https://www.merriam-webster.com/dictionary/-on#dictionary-entry-6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-moe1959atrial" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Moe, G. K., &amp;amp; Abildskov, J. A. (1959). Atrial fibrillation as a
self-sustaining arrhythmia independent of focal discharge. &lt;em&gt;American
Heart Journal&lt;/em&gt;, &lt;em&gt;58&lt;/em&gt;(1), 59&amp;ndash;70.
&lt;a class="link" href="https://doi.org/10.1016/0002-8703%2859%2990274-1" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0002-8703(59)90274-1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-mujovi-c2017catheter" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Mujović, N., Marinković, M., Lenarczyk, R., Tilz, R., &amp;amp; Potpara, T. S.
(2017). Catheter ablation of atrial fibrillation: An overview for
clinicians. &lt;em&gt;Advances in Therapy&lt;/em&gt;, &lt;em&gt;34&lt;/em&gt;, 1897&amp;ndash;1917.
&lt;a class="link" href="https://doi.org/10.1007/s12325-017-0590-z" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/s12325-017-0590-z&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-narayan2012treatment" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Narayan, S. M., Krummen, D. E., Shivkumar, K., Clopton, P., Rappel,
W.-J., &amp;amp; Miller, J. M. (2012). Treatment of atrial fibrillation by the
ablation of localized sources. &lt;em&gt;Journal of the American College of
Cardiology&lt;/em&gt;, &lt;em&gt;60&lt;/em&gt;(7), 628&amp;ndash;636.
&lt;a class="link" href="https://doi.org/10.1016/j.jacc.2012.05.022" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jacc.2012.05.022&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-panfilov2017theory" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Panfilov, A. V., &amp;amp; Dierckx, H. (2017). Theory of cardiac arrhythmias. In
&lt;em&gt;Cardiac electrophysiology. From cell to bedside, 7rd edition&lt;/em&gt; (pp.
325&amp;ndash;335). Elsevier.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-ramanathan2004noninvasive" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Ramanathan, C., Ghanem, R. N., Jia, P., Ryu, K., &amp;amp; Rudy, Y. (2004).
Noninvasive electrocardiographic imaging for cardiac electrophysiology
and arrhythmia. &lt;em&gt;Nature Medicine&lt;/em&gt;, &lt;em&gt;10&lt;/em&gt;(4), 422&amp;ndash;428.
&lt;a class="link" href="https://doi.org/10.1038/nm1011" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/nm1011&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-rodrigo2017technical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Rodrigo, M., Climent, A. M., Liberos, A., Fernandez-Avilas, F.,
Berenfeld, O., Atienza, F., &amp;amp; Guillem, M. S. (2017). Technical
considerations on phase mapping for identification of atrial reentrant
activity in direct- and inverse-computed electrograms. &lt;em&gt;Circulation:
Arrhythmia and Electrophysiology&lt;/em&gt;, &lt;em&gt;10&lt;/em&gt;(9), e005008.
&lt;a class="link" href="https://doi.org/10.1161/circep.117.005008" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/circep.117.005008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-rotermund1990imaging" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Rotermund, H.-H., Engel, W., Kordesch, M., &amp;amp; Ertl, G. (1990). Imaging of
spatio-temporal pattern evolution during carbon monoxide oxidation on
platinum. &lt;em&gt;Nature&lt;/em&gt;, &lt;em&gt;343&lt;/em&gt;(6256), 355&amp;ndash;357.
&lt;a class="link" href="https://doi.org/10.1038/343355a0" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/343355a0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-salama1987maps" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Salama, G., Lombardi, R., &amp;amp; Elson, J. (1987). Maps of optical action
potentials and NADH fluorescence in intact working hearts. &lt;em&gt;American
Journal of Physiology-Heart and Circulatory Physiology&lt;/em&gt;, &lt;em&gt;252&lt;/em&gt;(2),
H384&amp;ndash;H394. &lt;a class="link" href="https://doi.org/10.1152/ajpheart.1987.252.2.H384" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.1987.252.2.H384&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-samol2016atrial" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Samol, A., Hahne, K., &amp;amp; Monnig, G. (2016). Atrial fibrillation and
silent stroke: Links, risks, and challenges. &lt;em&gt;Vascular Health and Risk
Management&lt;/em&gt;, &lt;em&gt;2016&lt;/em&gt;, 65. &lt;a class="link" href="https://doi.org/10.2147/vhrm.s81807" target="_blank" rel="noopener"
 &gt;https://doi.org/10.2147/vhrm.s81807&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-seitz2017wholly" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Seitz, J., Bars, C., Théodore, G., Beurtheret, S., Lellouche, N.,
Bremondy, M., Ferracci, A., Faure, J., Penaranda, G., Yamazaki, M., et
al. (2017). Wholly patient-tailored ablation of atrial fibrillation
guided by spatio-temporal dispersion of electrograms in the absence of
pulmonary veins isolation. &lt;em&gt;Journal of the American College of
Cardiology&lt;/em&gt;, &lt;em&gt;69&lt;/em&gt;(3), 303. &lt;a class="link" href="https://doi.org/10.1016/j.jacc.2016.10.065" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jacc.2016.10.065&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-shibata2022mechanism" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Shibata, N., Inada, S., Nakazawa, K., Ashihara, T., Tomii, N., Yamazaki,
M., Honjo, H., Seno, H., &amp;amp; Sakuma, I. (2022). Mechanism of ventricular
fibrillation: Current status and problems. &lt;em&gt;Advanced Biomedical
Engineering&lt;/em&gt;, &lt;em&gt;11&lt;/em&gt;, 117&amp;ndash;135. &lt;a class="link" href="https://doi.org/10.14326/abe.11.117" target="_blank" rel="noopener"
 &gt;https://doi.org/10.14326/abe.11.117&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-smith2002predicting" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Smith, D. L., Lucey, B., Waller, L. A., Childs, J. E., &amp;amp; Real, L. A.
(2002). Predicting the spatial dynamics of rabies epidemics on
heterogeneous landscapes. &lt;em&gt;Proceedings of the National Academy of
Sciences&lt;/em&gt;, &lt;em&gt;99&lt;/em&gt;(6), 3668&amp;ndash;3672. &lt;a class="link" href="https://doi.org/10.1073/pnas.042400799" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1073/pnas.042400799&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-tomii2021spatial" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Tomii, N., Yamazaki, M., Ashihara, T., Nakazawa, K., Shibata, N., Honjo,
H., &amp;amp; Sakuma, I. (2021). Spatial phase discontinuity at the center of
moving cardiac spiral waves. &lt;em&gt;Computers in Biology and Medicine&lt;/em&gt;, &lt;em&gt;130&lt;/em&gt;,
104217. &lt;a class="link" href="https://doi.org/10.1016/j.compbiomed.2021.104217" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.compbiomed.2021.104217&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-trayanova2021machine" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Trayanova, N. A., Popescu, D. M., &amp;amp; Shade, J. K. (2021). Machine
learning in arrhythmia and electrophysiology. &lt;em&gt;Circulation Research&lt;/em&gt;,
&lt;em&gt;128&lt;/em&gt;(4), 544&amp;ndash;566. &lt;a class="link" href="https://doi.org/10.1161/circresaha.120.317872" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/circresaha.120.317872&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-verschelde2007covariant" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Verschelde, H., Dierckx, H., &amp;amp; Bernus, O. (2007). Covariant stringlike
dynamics of scroll wave filaments in anisotropic cardiac tissue.
&lt;em&gt;Physical Review Letters&lt;/em&gt;, &lt;em&gt;99&lt;/em&gt;(16), 168104.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevLett.99.168104" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevLett.99.168104&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-weiss2010early" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Weiss, J. N., Garfinkel, A., Karagueuzian, H. S., Chen, P.-S., &amp;amp; Qu, Z.
(2010). Early afterdepolarizations and cardiac arrhythmias. &lt;em&gt;Heart
Rhythm&lt;/em&gt;, &lt;em&gt;7&lt;/em&gt;(12), 1891&amp;ndash;1899.
&lt;a class="link" href="https://doi.org/10.1016/j.hrthm.2010.09.017" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.hrthm.2010.09.017&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-who2020top" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;WHO. (2020). &lt;em&gt;The top 10 causes of death.&lt;/em&gt;
&lt;a class="link" href="https://www.who.int/news-room/fact-sheets/detail/the-top-10-causes-of-death" target="_blank" rel="noopener"
 &gt;https://www.who.int/news-room/fact-sheets/detail/the-top-10-causes-of-death&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-wilson2020phase" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Wilson, D. (2020). Phase-amplitude reduction far beyond the weakly
perturbed paradigm. &lt;em&gt;Physical Review E&lt;/em&gt;, &lt;em&gt;101&lt;/em&gt;(2), 022220.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevE.101.022220" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevE.101.022220&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-wilson1974confinement" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Wilson, K. G. (1974). Confinement of quarks. &lt;em&gt;Physical Review D&lt;/em&gt;,
&lt;em&gt;10&lt;/em&gt;(8), 2445&amp;ndash;2459. &lt;a class="link" href="https://doi.org/10.1103/PhysRevD.10.2445" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevD.10.2445&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-winfree1973scroll" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Winfree, A. T. (1973). Scroll-shaped waves of chemical activity in three
dimensions. &lt;em&gt;Science&lt;/em&gt;, &lt;em&gt;181&lt;/em&gt;(4103), 937&amp;ndash;939.
&lt;a class="link" href="https://doi.org/10.1126/science.181.4103.937" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1126/science.181.4103.937&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-winfree1996quantitative" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Winfree, A. T., Caudle, S., Chen, G. L., McGuire, P., &amp;amp; Szilagyi, Z.
(1996). Quantitative optical tomography of chemical waves and their
organizing centers. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;6&lt;/em&gt;(4), 617&amp;ndash;626. &lt;a class="link" href="https://doi.org/10.1063/1.166208" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166208&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-winfree1983singular" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Winfree, A. T., &amp;amp; Strogatz, S. H. (1983). Singular filaments organize
chemical waves in three dimensions: I. Geometrically simple waves.
&lt;em&gt;Physica D: Nonlinear Phenomena&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;(1-2), 35&amp;ndash;49.
&lt;a class="link" href="https://doi.org/10.1016/0167-2789%2883%2990309-3" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0167-2789(83)90309-3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-wu1994double" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Wu, D., Yeh, S.-J., Wang, C.-C., Wen, M.-S., &amp;amp; Lin, F.-C. (1994). Double
loop figure-of-8 reentry as the mechanism of multiple atrioventricular
node reentry tachycardias. &lt;em&gt;American Heart Journal&lt;/em&gt;, &lt;em&gt;127&lt;/em&gt;(1), 83&amp;ndash;95.
&lt;a class="link" href="https://doi.org/10.1016/0002-8703%2894%2990513-4" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0002-8703(94)90513-4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-zhabotinsky1973autowave" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Zhabotinsky, A. M., &amp;amp; Zaikin, A. N. (1973). Autowave processes in a
distributed chemical system. &lt;em&gt;Journal of Theoretical Biology&lt;/em&gt;, &lt;em&gt;40&lt;/em&gt;(1),
45&amp;ndash;61. &lt;a class="link" href="https://doi.org/10.1016/0022-5193%2873%2990164-1" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0022-5193(73)90164-1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-zykov1987simulation" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Zykov, V. S. (1987). &lt;em&gt;Simulation of wave processes in excitable media&lt;/em&gt;.
Manchester University Press.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;</description></item><item><title>The Ithildin library for efficient numerical solution of anisotropic
reaction-diffusion problems in excitable media</title><link>https://kabus.eu/2024/09/19/kabus2024ithildin/</link><pubDate>Thu, 19 Sep 2024 00:00:00 +0000</pubDate><guid>https://kabus.eu/2024/09/19/kabus2024ithildin/</guid><description>&lt;img src="https://kabus.eu/2024/09/19/kabus2024ithildin/header.svg" alt="Featured image of post The Ithildin library for efficient numerical solution of anisotropic
reaction-diffusion problems in excitable media
" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;This article was previously published in PLOS ONE 19(9): e0303674
(&lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus, Cloet, et al., 2024&lt;/a&gt;) and is a
chapter of my
&lt;a class="link" href="https://kabus.eu/diss" &gt;dissertation&lt;/a&gt;.
The full thesis is available online as a
&lt;a class="link" href="https://dkabus.gitlab.io/thesis-phd/kabus2025dissertation.pdf" target="_blank" rel="noopener"
 &gt;PDF&lt;/a&gt; or
can be read &lt;a class="link" href="https://kabus.eu/diss" &gt;chapter by chapter on this website&lt;/a&gt;.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Desmond Kabus&lt;sup&gt;1,2&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0002-6965-5211" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0002-6965-5211&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Marie Cloet&lt;sup&gt;1&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0002-8974-6401" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0002-8974-6401&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Christian Zemlin&lt;sup&gt;3&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0001-5834-5544" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0001-5834-5544&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Olivier Bernus&lt;sup&gt;4&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0003-3917-5791" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0003-3917-5791&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hans Dierckx&lt;sup&gt;1&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0003-0899-8082" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0003-0899-8082&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Institutions:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Department of Mathematics, KU Leuven Campus Kortrijk (KULAK), Etienne Sabbelaan 53, 8500 Kortrijk, Belgium&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Laboratory of Experimental Cardiology, Leiden University Medical Center (LUMC), Albinusdreef 2, 2333 ZA Leiden, The Netherlands&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Division of Cardiothoracic Surgery, Department of Surgery, University of Washington School of Medicine, 660 South Euclid Avenue, 63110 St Louis, MO, United States of America&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Univ. Bordeaux, Inserm, Centre de Recherche Cardio-Thoracique de Bordeaux U1045, IHU Liryc, Hôpital Xavier Arnozan, Avenue du Haut Lévêque, 33600 Pessac, France&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Correspondence:&lt;/strong&gt; &lt;a class="link" href="mailto:h.dierckx@kuleuven.be" &gt;h.dierckx@kuleuven.be&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DOI:&lt;/strong&gt;
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0303674" target="_blank" rel="noopener"
 &gt;10.1371/journal.pone.0303674&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Editor:&lt;/strong&gt;
Rafael Sachetto Oliveira, Universidade Federal de Sao Joao del-Rei, Brazil&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keywords:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;excitable media&lt;/li&gt;
&lt;li&gt;cardiac electrophysiology&lt;/li&gt;
&lt;li&gt;open-source&lt;/li&gt;
&lt;li&gt;finite differences&lt;/li&gt;
&lt;li&gt;anisotropic diffusion&lt;/li&gt;
&lt;li&gt;reaction-diffusion equation&lt;/li&gt;
&lt;li&gt;C++&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ithildin is an open-source library and framework for efficient
parallelized simulations of excitable media, written in the C++
programming language. It uses parallelization on multiple CPU processors
via the message passing interface (MPI). We demonstrate the library&amp;rsquo;s
versatility through a series of simulations in the context of the
monodomain description of cardiac electrophysiology, including the S1S2
protocol, spiral break-up, and spiral waves in ventricular geometry. Our
work demonstrates the power of Ithildin as a tool for studying complex
wave patterns in cardiac tissue and its potential to inform future
experimental and theoretical studies. We publish our full code with this
paper in the name of open science.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Popular summary:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We present Ithildin, an open-source library for reaction-diffusion
systems such as the electrical waves in cardiac tissue controlling the
heart beat. We demonstrate the versatility of Ithildin by example
simulations in various cell models and geometries, from simple 2D
simulations to detailed ones in ventricular geometry. Our simulations
highlight key features of Ithildin, such as recording
pseudo-electrograms or filament trajectories. We hope that our work will
contribute to the growing understanding of cardiac electrophysiology and
inform future experimental and theoretical studies.&lt;/p&gt;
&lt;div id="sec:ithildin:intro"&gt;
&lt;h1 id="introduction"&gt;Introduction
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;With the Ithildin framework, we want to open up new gateways in the
numerical simulation of reaction-diffusion systems, such as the
electrical activation patterns in the heart.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Our motivation to write a reaction-diffusion solver comes from the
numerical study of electrical patterns inside the heart (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et
al., 2011&lt;/a&gt;). These patterns, which are
incompletely understood, are a main cause of death and even as a chronic
disease, they complicate people&amp;rsquo;s lives. In the past decades, computer
models of arrhythmia have allowed mechanistic insight in the origin and
control of arrhythmias (&lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma, 1998&lt;/a&gt;).
On the longer term, it is thought that digitized versions of patients'
hearts could help offer better diagnostics and planning of procedures;
such personalized heart models are called &lt;em&gt;cardiac digital twins&lt;/em&gt;
(&lt;a class="link" href="#ref-gillette2021framework" &gt;Gillette et al., 2021&lt;/a&gt;; &lt;a class="link" href="#ref-koopsen2024virtual" &gt;Koopsen et al.,
2024&lt;/a&gt;; &lt;a class="link" href="#ref-niederer2019computational" &gt;Niederer et al.,
2019&lt;/a&gt;; &lt;a class="link" href="#ref-trayanova2020how" &gt;Trayanova et al.,
2020&lt;/a&gt;). In view of open science, we have decided
to share the code that has been steadily developed in our group since
2007 with the scientific community.&lt;/p&gt;
&lt;div id="fig:ithildin:flowchart"&gt;
&lt;p&gt;&lt;img alt="Ithildin can be used to solve reaction-diffusion problems in excitable media" class="gallery-image" data-flex-basis="453px" data-flex-grow="189" height="1082" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/flowchart.png" srcset="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/flowchart_hu_14270f0e5867822b.png 800w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/flowchart_hu_efb1d73c462b6263.png 1600w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/flowchart.png 2045w" width="2045"&gt;&lt;/p&gt;
&lt;p&gt;Figure 1: &lt;strong&gt;Ithildin can be used to solve reaction-diffusion problems in
excitable media.&lt;/strong&gt; Required inputs for the software are: the diffusion
tensor and geometry of a medium&amp;mdash;such as the heart muscle, a reaction
term&amp;mdash;the so-called model, and source terms&amp;mdash;typically a stimulation
protocol. Ithildin can then calculate the evolution of the model
variables in the medium over time. During calculation, Ithildin records
relevant spatio-temporal data and metadata, as well as detecting rotor
cores as filaments. The data visualized here are taken from several
simulations which will be discussed below.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;A flowchart outlining the functionality of Ithildin can be found in
Fig. &lt;a class="link" href="#fig:ithildin:flowchart" &gt;1&lt;/a&gt;. Ithildin is designed to comply with
the 2011 version of the ISO-C++ standard (&lt;a class="link" href="#ref-cpp11" &gt;ISO, 2011&lt;/a&gt;), but
it compiles with all newer versions, including the current 2023 ISO-C++
standard (&lt;a class="link" href="#ref-cpp14" &gt;ISO, 2014&lt;/a&gt;, &lt;a class="link" href="#ref-cpp17" &gt;2017&lt;/a&gt;,
&lt;a class="link" href="#ref-cpp20" &gt;2020&lt;/a&gt;, &lt;a class="link" href="#ref-cpp23" &gt;2023&lt;/a&gt;). The software facilitates
forward Euler and Runge-Kutta finite-difference solutions for
reaction-diffusion systems in $N$-dimensional space,
such as the monodomain equation for cardiac electrophysiology, with
specified boundary conditions (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The framework offers quick computation through CPU parallelization using
&lt;a class="link" href="https://www.open-mpi.org/" target="_blank" rel="noopener"
 &gt;OpenMPI&lt;/a&gt; (&lt;a class="link" href="#ref-openmpi" &gt;Graham et al.,
2006&lt;/a&gt;). It also boasts decent documentation of available
features, made accessible through &lt;a class="link" href="https://doxygen.nl/" target="_blank" rel="noopener"
 &gt;Doxygen&lt;/a&gt; (&lt;a class="link" href="#ref-doxygen" &gt;van
Heesch, 2023&lt;/a&gt;). Ithildin writes easy-to-parse YAML log
files to document simulation setups (&lt;a class="link" href="#ref-yaml" &gt;döt Net et al., 2023&lt;/a&gt;).
Additionally, it allows convenient output of frames of recorded
variables at regular intervals in the form of &lt;a class="link" href="https://numpy.org/doc/stable/reference/generated/numpy.lib.format.html" target="_blank" rel="noopener"
 &gt;NumPy NPY
files&lt;/a&gt;
(&lt;a class="link" href="#ref-numpy" &gt;Harris et al., 2020&lt;/a&gt;). The software supports easy and
powerful post-processing with the &lt;a class="link" href="https://gitlab.com/heartkor/py_ithildin/" target="_blank" rel="noopener"
 &gt;Python module for
Ithildin&lt;/a&gt; (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;), including integration with &lt;a class="link" href="https://scipy.org/" target="_blank" rel="noopener"
 &gt;Scientific
Python&lt;/a&gt; (&lt;a class="link" href="#ref-scipy" &gt;Virtanen et al., 2020&lt;/a&gt;), 2D
visualization with &lt;a class="link" href="https://matplotlib.org/" target="_blank" rel="noopener"
 &gt;Matplotlib&lt;/a&gt; (&lt;a class="link" href="#ref-matplotlib" &gt;Hunter,
2007&lt;/a&gt;), and 3D visualization with
&lt;a class="link" href="https://www.paraview.org/" target="_blank" rel="noopener"
 &gt;ParaView&lt;/a&gt; (&lt;a class="link" href="#ref-paraview" &gt;Ahrens et al.,
2005&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Ithildin also allows the recording of pseudo-electrograms (EGMs) and
state variables at full numerical time resolution, as well as the
tracking of filaments, which represent the instantaneous rotation axes
of rotors. The software features a flexible setup for in-silico
experiments, also called simulations, through a simple class-based C++
interface.&lt;/p&gt;
&lt;p&gt;Various types of geometries are implemented, ranging from a simple 1D
cable and spirals in 2D tissue to whole-heart geometry and even 4D
hyperspace. The space can be partitioned to use multiple cell models in
the same experiment via &lt;code&gt;Model_multi&lt;/code&gt;. Realistic stimulation protocols
can be added as &lt;code&gt;Stimulus&lt;/code&gt; objects and may be started by a &lt;code&gt;Trigger&lt;/code&gt;.
Ithildin also includes a logging system with minimal impact on
computation speed and various levels of verbosity.&lt;/p&gt;
&lt;p&gt;In this paper, we provide an overview of this framework, guiding the
reader through its components. Results from several in-silico
experiments are presented as the main components of Ithildin are
introduced. The details of these so-called simulations are outlined
towards the end of this paper in section &lt;a class="link" href="#sec:ithildin:results" &gt;5&lt;/a&gt;,
along with a tabular overview in Table &lt;a class="link" href="#tbl:ithildin:sims" &gt;4&lt;/a&gt;.&lt;/p&gt;
&lt;div id="essential-numerical-methods"&gt;
&lt;h1 id="essential-numerical-methods"&gt;Essential numerical methods
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="reaction-diffusion-system"&gt;&lt;/p&gt;
&lt;h2 id="reaction-diffusion-system"&gt;Reaction-diffusion system
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The diffusion of electrical signals in cardiac tissue can be modelled as
a reaction-diffusion system, where the diffusion tensor
${{\bm{{D}}}}$ represents the anisotropic properties
of the medium. This tensor encapsulates the spatial orientation of
fibers in the medium and the effects of inhomogeneities on signal
propagation. With the local unit vectors along the fibers
${{\bm{{e}}}}_{\text{f}}$, normal to fibers in the
sheet plane ${{\bm{{e}}}}_{\text{s}}$, and normal to
both of these
${{\bm{{e}}}}_{\!\times\!} = {{\bm{{e}}}}_{\text{f}} \times {{\bm{{e}}}}_{\text{s}}$,
forming a orthonormal basis, the fiber orientation is encoded using
diffusivities
$D_{{\text{f}}, {\text{s}}, {\!\times\!}}{{\left( {{\bm{{x}}}} \right)}}$
in each of these directions (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;): &lt;span &gt;$$
{{\bm{{D}}}}
=
D_{\text{f}} {{\bm{{e}}}}_{\text{f}} {{{{\bm{{e}}}}_{\text{f}}}^\mathrm{T}}
+
D_{\text{s}} {{\bm{{e}}}}_{\text{s}} {{{{\bm{{e}}}}_{\text{s}}}^\mathrm{T}}
+
D_{\!\times\!} {{\bm{{e}}}}_{\!\times\!} {{{{\bm{{e}}}}_{\!\times\!}}^\mathrm{T}}
\qquad{(1)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The core equation governing the evolution of the state variable vector
${{\underline{{u}}}}$ is the reaction-diffusion
equation: &lt;span id="eq:ithildin:rde"&gt;$$
\partial_t {{\underline{{u}}}} = {{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}} + {{\underline{{r}}}}{{\left( {{\underline{{u}}}} \right)}}
\qquad{(2)}$$&lt;/span&gt; or in index notation:
&lt;span &gt;$$
\partial_t u_m{{\left( t,{{\bm{{x}}}} \right)}}
=
\textstyle\sum_{m'}
 P_{mm'} \;
 \textstyle\sum_{n}
 \partial_{n}
 \textstyle\sum_{n'}
 D_{nn'}{{\left( {{\bm{{x}}}} \right)}} \;
 \partial_{n'}
 u_{m'}{{\left( t, {{\bm{{x}}}} \right)}}
+
r_{m}{{\left( {{\underline{{u}}}};{{\bm{{x}}}} \right)}}
\qquad{(3)}$$&lt;/span&gt; for
$m, m' \in {{\left\{1,...,M \right\}}}$ with the
number of state variables $M$, and
$n, n' \in {{\left\{1,...,N \right\}}}$ with the
number of spatial dimensions $N$, using the notation
$\partial_n = \partial_{x_n}$ for the spatial partial
derivatives.&lt;/p&gt;
&lt;p&gt;Here, ${{\underline{{u}}}}$ is the state variable
vector and ${{\underline{{r}}}}({{\underline{{u}}}})$
accounts for the reaction term and is called the &lt;em&gt;model&lt;/em&gt;. We refer to
the first component of ${{\underline{{u}}}}$ as
$u$, which for electrophysiological models is the
transmembrane voltage $V_\text{m}$ or a rescaled
version of it, see also section &lt;a class="link" href="#sec:ithildin:reactionterm" &gt;4.2&lt;/a&gt;. For
two-variable models, the second component of
${{\underline{{u}}}}$ is often referred to as the
restitution or recovery variable $v$. In the term
representing diffusion, ${{\bm{{D}}}}$ is determined
by the geometry of the medium and the presence of inhomogeneities, see
section &lt;a class="link" href="#sec:ithildin:diffusionterm" &gt;4.1&lt;/a&gt;. The projection matrix
${{\underline{{P}}}}$ is typically a diagonal matrix
describing whether or not a variable is diffused. For instance, only the
first variable of the AP96 model (&lt;a class="link" href="#ref-aliev1996simple" &gt;Aliev &amp;amp; Panfilov,
1996&lt;/a&gt;) is diffused, such that
${{\underline{{P}}}} = {\operatorname{diag}{{\left( 1, 0 \right)}}}$.&lt;/p&gt;
&lt;p&gt;Different notation is used to distinguish between vectors
${{\bm{{x}}}}$ and matrices
${{\bm{{D}}}}$ in physical space in bold font, and
underlined vectors ${{\underline{{u}}}}$ and matrices
${{\underline{{P}}}}$ with respect to state
variables. We use lowercase letters for vectors and uppercase for
matrices. An overview of the most relevant quantities in Ithildin is
given in Table &lt;a class="link" href="#tbl:ithildin:quantities" &gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;div id="tbl:ithildin:quantities"&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;symbol&lt;/th&gt;
 &lt;th&gt;dimension&lt;/th&gt;
 &lt;th&gt;unit&lt;/th&gt;
 &lt;th&gt;name&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;$N$&lt;/td&gt;
 &lt;td&gt;$\in\mathbb N$&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;number of spatial dimensions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;$M$&lt;/td&gt;
 &lt;td&gt;$\in\mathbb N$&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;number of state variables&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;$t$&lt;/td&gt;
 &lt;td&gt;$\in \mathbb R_+$&lt;/td&gt;
 &lt;td&gt;ms&lt;/td&gt;
 &lt;td&gt;time&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;${{\bm{{x}}}}$&lt;/td&gt;
 &lt;td&gt;$\in \Omega \subset \mathbb R^N$&lt;/td&gt;
 &lt;td&gt;mm&lt;/td&gt;
 &lt;td&gt;space&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;${{\underline{{u}}}}{{\left( t, {{\bm{{x}}}} \right)}}$&lt;/td&gt;
 &lt;td&gt;$\in \mathbb R^M$&lt;/td&gt;
 &lt;td&gt;$\star$ (various units)&lt;/td&gt;
 &lt;td&gt;state variables&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;${{\underline{{r}}}}{{\left( {{\bm{{x}}}}, {{\underline{{u}}}} \right)}}$&lt;/td&gt;
 &lt;td&gt;$\in \mathbb R^M$&lt;/td&gt;
 &lt;td&gt;$\star$/ms&lt;/td&gt;
 &lt;td&gt;reaction term, model function&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;${{\bm{{D}}}}{{\left( {{\bm{{x}}}} \right)}}$&lt;/td&gt;
 &lt;td&gt;$\in \mathbb R^{N\times N}$&lt;/td&gt;
 &lt;td&gt;mm²/ms&lt;/td&gt;
 &lt;td&gt;diffusion tensor&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;${{\underline{{P}}}}$&lt;/td&gt;
 &lt;td&gt;$\in \mathbb R^{M\times M}$&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;projection matrix&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Table 1: &lt;strong&gt;Quantities in the reaction-diffusion problem&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Ithildin obtains approximate solutions of the reaction-diffusion
equation (Eq. &lt;a class="link" href="#eq:ithildin:rde" &gt;2&lt;/a&gt;) via a finite-differences approach:
Time $t$ and space ${{\bm{{x}}}}$
are discretized on a grid and values
${{\underline{{u}}}}{{\left( t, {{\bm{{x}}}} \right)}}$
are associated with the vertices of this grid. We choose a fixed
temporal resolution, the time step $\Delta t$, and
constant spatial grid spacing $\Delta {{\bm{{x}}}}$.
The values
${{\underline{{u}}}}{{\left( t + \Delta t, {{\bm{{x}}}} \right)}}$
at a subsequent time-step are computed based on the previous ones,
according to discretized versions of the governing equations, i.e., the
reaction-diffusion equation (Eq. &lt;a class="link" href="#eq:ithildin:rde" &gt;2&lt;/a&gt;), together with
boundary and initial conditions.&lt;/p&gt;
&lt;div id="sec:ithildin:time:integration"&gt;
&lt;h2 id="time-integration"&gt;Time integration
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Starting from an initial state, the state variable vector
${{\underline{{u}}}}$ is integrated over time using a
so-called time stepping scheme leading to an approximate solution of the
reaction-diffusion system using finite differences. Ithildin implements
two main stepping schemes to choose from: forward Euler and the classic
Runge-Kutta method (RK4) (&lt;a class="link" href="#ref-euler1794institutiones" &gt;Euler, 1794&lt;/a&gt;;
&lt;a class="link" href="#ref-press2007numerical" &gt;Press, 2007&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Defining ${{\underline{{f}}}}$ as the right hand side
of the reaction-diffusion equation (Eq. &lt;a class="link" href="#eq:ithildin:rde" &gt;2&lt;/a&gt;), the
forward Euler method takes the form (&lt;a class="link" href="#ref-press2007numerical" &gt;Press,
2007&lt;/a&gt;):
&lt;span id="eq:ithildin:euler"&gt;$$
{{\underline{{u}}}}
{{\left( t + \Delta t, {{\bm{{x}}}} \right)}}
=
{{\underline{{u}}}}
{{\left( t, {{\bm{{x}}}} \right)}}
+
\Delta t
\,
{{\underline{{f}}}}
{{\left( t, {{\bm{{x}}}}; {{\underline{{u}}}} \right)}}
+
O{{\left( \Delta t^2 \right)}}
\qquad{(4)}$$&lt;/span&gt; This method is the
default time integration scheme in Ithildin. Despite its numerical error
being of order $O{{\left( \Delta t^2 \right)}}$, with
a sufficiently small time step, the accuracy of the Euler method is
adequate for our use cases.&lt;/p&gt;
&lt;p&gt;Due to the Courant-Friedrichs-Lewy condition (CFL), a stability
criterion for the integration of the reaction-diffusion equation,
$\Delta t$ needs to be chosen sufficiently small
(&lt;a class="link" href="#ref-courant1928cfl" &gt;Courant et al., 1928&lt;/a&gt;). Ithildin automatically
chooses an appropriate time step based on the CFL condition for the
different supported geometries,
cf. section &lt;a class="link" href="#sec:ithildin:diffusionterm" &gt;4.1&lt;/a&gt;. For example, for the
most simple implemented geometry contained in Ithildin, i.e., isotropic
diffusion (see &lt;code&gt;Geometry_Iso&lt;/code&gt; in
section &lt;a class="link" href="#sec:ithildin:diffusionterm" &gt;4.1&lt;/a&gt; and
Table &lt;a class="link" href="#tbl:ithildin:geometries" &gt;2&lt;/a&gt;), the CFL condition is enforced by
setting (&lt;a class="link" href="#ref-li1994convergence" &gt;Li et al., 1994&lt;/a&gt;):
&lt;span id="eq:ithildin:cfl"&gt;$$
\Delta t
&lt;
{{\left[ 2\max{{{\underline{{P}}}}} \sum_{n=1}^{N} \frac{D_{nn}}{\Delta x_n^2} \right]}}^{-1}
\qquad{(5)}$$&lt;/span&gt; where
$D_{nn}$ are the diagonal components of
${{\bm{{D}}}}$ and
$\max{{{\underline{{P}}}}}$ is the maximum value of
${{\underline{{P}}}}$.&lt;/p&gt;
&lt;p&gt;Higher accuracy at the cost of more computations per time step, can be
achieved with the RK4 method (&lt;a class="link" href="#ref-press2007numerical" &gt;Press, 2007&lt;/a&gt;):
&lt;span id="eq:ithildin:rk4"&gt;$$\begin{aligned}
{{\underline{{u}}}}
{{\left( t + \Delta t, {{\bm{{x}}}} \right)}}
&amp;=
{{\underline{{u}}}}
{{\left( t, {{\bm{{x}}}} \right)}}
+ \frac{1}{6}\Delta{{\underline{{u}}}}_1
+ \frac{1}{3}\Delta{{\underline{{u}}}}_2
+ \frac{1}{3}\Delta{{\underline{{u}}}}_3
+ \frac{1}{6}\Delta{{\underline{{u}}}}_4
+
O{{\left( \Delta t^5 \right)}}
\\
\Delta{{\underline{{u}}}}_1
&amp;:=
\Delta t\,
{{\underline{{f}}}}
{{\left( t, {{\bm{{x}}}}; {{\underline{{u}}}} \right)}}
\\
\Delta{{\underline{{u}}}}_2
&amp;:=
\Delta t\,
{{\underline{{f}}}}
{{\left( t + \textstyle\frac{1}{2}\Delta t, {{\bm{{x}}}}; {{\underline{{u}}}} + \textstyle\frac{1}{2}\Delta{{\underline{{u}}}}_1 \right)}}
\\
\Delta{{\underline{{u}}}}_3
&amp;:=
\Delta t\,
{{\underline{{f}}}}
{{\left( t + \textstyle\frac{1}{2}\Delta t, {{\bm{{x}}}}; {{\underline{{u}}}} + \textstyle\frac{1}{2}\Delta{{\underline{{u}}}}_2 \right)}}
\\
\Delta{{\underline{{u}}}}_4
&amp;:=
\Delta t\,
{{\underline{{f}}}}
{{\left( t + \Delta t, {{\bm{{x}}}}; {{\underline{{u}}}} + \Delta{{\underline{{u}}}}_3 \right)}}
\end{aligned}\qquad{(6)}$$&lt;/span&gt; Note that
${{\underline{{f}}}}$ needs to be evaluated four
times for the RK4 method and only once for the Euler method. While RK4
is still an explicit method subject to instability at too large
$\Delta t$, a larger $\Delta t$
value than for the Euler method can typically be used.&lt;/p&gt;
&lt;p&gt;The stepping scheme to be used can be chosen in Ithildin on a
per-variable level via &lt;code&gt;Model::steppings&lt;/code&gt;.&lt;/p&gt;
&lt;div id="sec:ithildin:spatial:derivatives"&gt;
&lt;h2 id="numerical-spatial-derivatives"&gt;Numerical spatial derivatives
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;For the numerical solution of the reaction-diffusion equation
(Eq. &lt;a class="link" href="#eq:ithildin:rde" &gt;2&lt;/a&gt;), the spatial derivative in its right hand
side must be computed, i.e., the diffusion operator
${{\underline{{P}}}}\nabla\cdot{{\bm{{D}}}}\nabla{{\underline{{u}}}}$.
This is implemented as weighted sums of the value of
${{\underline{{u}}}}$ at neighboring vertices on the
grid of the discretized domain. The weights for the calculation of the
stencil depend on the chosen type of diffusion
(section &lt;a class="link" href="#sec:ithildin:diffusionterm" &gt;4.1&lt;/a&gt;). The two main types in this
software are a first order stencil, including only the nearest
neighbors, and a second order stencil, including also the next to
nearest neighbors.&lt;/p&gt;
&lt;p&gt;In the simplest case (see &lt;code&gt;Geometry_Iso&lt;/code&gt; in
section &lt;a class="link" href="#sec:ithildin:diffusionterm" &gt;4.1&lt;/a&gt; and
Table &lt;a class="link" href="#tbl:ithildin:geometries" &gt;2&lt;/a&gt;), we consider isotropic and
homogeneous diffusivity. The diffusion operator can then be computed via
the Laplacian operator $\nabla^2$. This is done with
a 5-point stencil for the 2D case, a 7-point stencil for the 3D case,
etc., see also Fig. &lt;a class="link" href="#fig:ithildin:stencil" &gt;2&lt;/a&gt;, panel (a). Consequently,
the weights are calculated as: &lt;span &gt;$$
\begin{aligned}
w_n &amp;= \frac{1}{\Delta x_n} \quad \text{for }1\leq n\leq 2 N
\\
w_0 &amp;= -\sum_{n=1}^{2N}w_n
\end{aligned}
\qquad{(7)}$$&lt;/span&gt; where
$N$ is the number of dimensions and
$\Delta x_n$ is the grid resolution in the direction
of the neighbor corresponding to weight $w_i$, e.g.,
$\Delta x_5 = \Delta z$. Note that the indices
correspond to those displayed in Fig. &lt;a class="link" href="#fig:ithildin:stencil" &gt;2&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:ithildin:stencil"&gt;
&lt;p&gt;&lt;img alt="Stencils for isotropic diffusion (a) and orthotropic diffusion (b) with numbering of the involved grid points" class="gallery-image" data-flex-basis="650px" data-flex-grow="270" height="162" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/stencils.png" width="439"&gt;&lt;/p&gt;
&lt;p&gt;Figure 2: &lt;strong&gt;Stencils for isotropic diffusion (a) and orthotropic
diffusion (b) with numbering of the involved grid points.&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;For the more general orthotropic diffusion, the stencil for numerical
differentiation includes the nearest and diagonal neighbors of a grid
point, see Fig. &lt;a class="link" href="#fig:ithildin:stencil" &gt;2&lt;/a&gt;, panel (b). The weights for
orthotropic diffusion are obtained by a combination of central
differences approximations to derivatives and linear interpolation of
values between two grid points. For more details, the reader is referred
to the documentation of &lt;code&gt;Geometry_OrtAniso&lt;/code&gt;.&lt;/p&gt;
&lt;div id="sec:ithildin:implementation"&gt;
&lt;h1 id="implementation"&gt;Implementation
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The source code of Ithildin is written in the C++ programming language,
following the 2011 version of the ISO-C++ standard (&lt;a class="link" href="#ref-cpp11" &gt;ISO,
2011&lt;/a&gt;). This was chosen to facilitate programming at a level
relatively close to the hardware, but also using some of the useful
data-structures that are contained in the standard template library
(STL).&lt;/p&gt;
&lt;p&gt;Ithildin is designed to run in parallel on multiple CPU cores using MPI,
specifically OpenMPI (&lt;a class="link" href="#ref-openmpi" &gt;Graham et al., 2006&lt;/a&gt;). Using the
&lt;code&gt;mpirun&lt;/code&gt; command, multiple instances, also known as processes, of the
same compiled executable are started that run across different processor
cores. The processes are then coordinated such that there is one
so-called &lt;em&gt;manager&lt;/em&gt; process, that manages a bunch of so-called &lt;em&gt;worker&lt;/em&gt;
processes. The manager does an equal share of the computational work,
just like a worker. The only difference is that the manager distributes
and directs information to be exchanged from one process to another. In
Ithildin, the memory is not shared across processes, instead each
process works on its share of the computational domain. We split the
domain in the $x$-direction, such that each process
is responsible for computations on a roughly equal share of vertices
inside the to-be-simulated medium. Even when some parts of the domain
are classified as exterior points, i.e., points on which no calculations
need to be performed, they are taken into account when splitting the
domain between processes. This splitting is possible because the
reaction-diffusion systems to be studied with Ithildin are local,
meaning that the temporal evolution at each time $t$
and each point ${{\bm{{x}}}}$ in space depends only
on the current state vector
${{\underline{{u}}}}{{\left( t, {{\bm{{x}}}} \right)}}$
at that position and its spatial derivatives
(Eq. &lt;a class="link" href="#eq:ithildin:rde" &gt;2&lt;/a&gt;). Internally, a layer of so-called &lt;em&gt;ghost
points&lt;/em&gt; is added around each process&amp;rsquo; part of the domain such that the
spatial derivatives can still be calculated in the same way as for any
other point in the domain
(section &lt;a class="link" href="#sec:ithildin:spatial:derivatives" &gt;2.3&lt;/a&gt;). The values
${{\underline{{u}}}}$ on these ghost points are
exchanged with the neighboring processes, as coordinated by the manager
process. Additional ghost points are also used to enforce Neumann
boundary conditions, which is done by setting the weights for the
calculation of the numerical spatial derivatives accordingly.&lt;/p&gt;
&lt;p&gt;To run a simulation in Ithildin, the user needs to define a &lt;code&gt;main()&lt;/code&gt;
function that is to be called by all subprocesses. This is usually done
using a C++ file calling the required components of the Ithildin library
defining the &lt;code&gt;main()&lt;/code&gt; function, a so-called &lt;em&gt;main file&lt;/em&gt;. Ithildin can be
installed as a shared library on Unix-based systems that is required by
executables obtained from compiling main files. Alternatively, it is
also possible to statically compile the Ithildin library with a main
file into a stand-alone executable.&lt;/p&gt;
&lt;p&gt;Besides the necessary preparations for using MPI, running a simulation
using Ithildin&amp;rsquo;s &lt;code&gt;Sim&lt;/code&gt; class requires three main components, which are
instances of three classes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Model&lt;/code&gt;: the reaction term
${{\underline{{r}}}}{{\left( {{\underline{{u}}}} \right)}}$,
typically a cell model,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Geometry&lt;/code&gt;: the discretized diffusion term
${{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}$
for a chosen geometry of the medium, and&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Source&lt;/code&gt;: the stimulus protocol to use as well as inhomogeneities in
the medium.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In the following section &lt;a class="link" href="#sec:ithildin:application" &gt;4&lt;/a&gt;, an overview is
given for each of these classes and their derived classes. Combining all
of the components, an illustrative, minimal main file can be obtained,
in which a planar wave crosses the medium in positive
$x$-direction:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;quot;ithildin.h&amp;quot;

int main(int argc, char** argv){
 // 0. initialize MPI
 Mpiclass mpi(argc, argv);

 // 1. select reaction term
 Model_SmooKa model;

 // 2. select diffusion term
 vector&amp;lt;int&amp;gt; size{30, 30, 1};
 vector&amp;lt;float&amp;gt; dx{1., 1., 1.};
 Geometry_Iso geom{&amp;amp;mpi, size, dx, &amp;amp;model};

 // (set up simulation)
 Sim sim{1., 10, &amp;amp;mpi, &amp;amp;model, &amp;amp;geom, &amp;quot;example&amp;quot;};

 // 3. define stimulus protocol
 Source sour{&amp;amp;model, &amp;amp;geom, &amp;amp;mpi, &amp;amp;sim};
 sour.stimulate({{0}, {1.}, Shape::Rect({0, 0}, {5, 0})});

 // (run simulation)
 return sim.run(&amp;amp;sour);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;More detailed examples for main files can be found in the appendix,
where we set up the numerical examples used throughout this paper.&lt;/p&gt;
&lt;p&gt;We consider the geometry, the model and the source to be the inputs of
Ithildin, see also Fig. &lt;a class="link" href="#fig:ithildin:flowchart" &gt;1&lt;/a&gt;. Upon running the
simulation, Ithildin produces a variety of outputs, as files in
easy-to-parse standardized data formats. The names of these files all
begin with the so-called &lt;em&gt;stem&lt;/em&gt;, consisting of a descriptive series name
and a serial number, which defaults to a time-stamp. In the following,
an overview of the usual output files of Ithildin by suffix appended to
the stem is provided:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_log.yaml&lt;/code&gt;: The log file contains metadata describing the setup of
the simulation, as well as metadata about the conditions under which
the simulation was run. This file is always output by Ithildin and
is considered the central file of the results, as it points to the
relevant other files that are only conditionally written during the
simulation. While earlier versions of Ithildin used a non-standard
format for the log files, in current versions, the YAML format is
used, making it easy to parse by both: humans and machines (&lt;a class="link" href="#ref-yaml" &gt;döt Net
et al., 2023&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_main.cpp&lt;/code&gt;: A copy of the C++ code in the main file may be included
in the results for reproducibility.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_git.diff&lt;/code&gt;: If run in a Git-repository with changes since the last
commit, a patch file of these changes will be included in the
results.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_*.txyz.npy&lt;/code&gt;: For each of the state variables
${{\underline{{u}}}}$, a so-called var file in
the NumPy NPY format will be written (&lt;a class="link" href="#ref-numpy" &gt;Harris et al.,
2020&lt;/a&gt;). These files contain the
$N+1$-dimensional floating-point number array of
the evolution of a state variable $u$ in the
whole computational grid over time. Note that the order of indices
is $(t, x, y, z)$, meaning that time is the
slowest varying index and the $x$-axis the second
slowest varying index. This order was chosen because the domain is
split across processes along the $x$-axis, such
that the processors can open and write to these files sequentially.
For 2-dimensional simulations, the third spatial dimension, the
$z$-axis, is one vertex thick, such that each var
file still has four dimensions. For higher-dimensional simulations,
more axes are added, leading to more dimensions in the var files.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_inhom.txyz.npy&lt;/code&gt;: The &lt;code&gt;inhom&lt;/code&gt; field, see details in
section &lt;a class="link" href="#sec:ithildin:inhomogeneities" &gt;4.3&lt;/a&gt;, is also stored in the
NPY format, but with integer values, and only for the initial
time-step. This file hence has the shape
$(1, N_x, N_y, N_z)$ with
$N_n$ denoting the number of vertices in each of
the spatial dimensions.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_hist*.csv&lt;/code&gt;: Comma-separated value (CSV) files describing the
temporal evolution of
${{\underline{{u}}}}{{\left( t,{{\bm{{x}}}}_\text{s} \right)}}$
at a chosen sensor position
${{\bm{{x}}}}_\text{s}\in\Omega\subset\mathbb{R}^{N}$,
see details in section &lt;a class="link" href="#sec:ithildin:history" &gt;4.5&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_egm*.csv&lt;/code&gt;: CSV files containing the recorded pseudo-EGM
$\Phi{{\left( t,{{\bm{{x}}}}_\text{e} \right)}}$
at a chosen electrode location
${{\bm{{x}}}}_\text{e}\in\mathbb{R}^{N}$, see
details in section &lt;a class="link" href="#sec:ithildin:egm" &gt;4.6&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_tipdata.yaml&lt;/code&gt;: This YAML file is written if filament-tracking is
turned on, see also section &lt;a class="link" href="#sec:ithildin:filaments" &gt;4.7&lt;/a&gt;, and
contains the detected phase singularities in regular time intervals.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While we have selected these file formats to be easy to read using a
wide variety of software, we have also developed the Python module for
Ithildin to facilitate interacting with the results of an Ithildin
simulation and converting them to a variety of file formats, for
instance writing files in the extensible data model and format (XDMF)
that can be used to view simulation results in ParaView (&lt;a class="link" href="#ref-paraview" &gt;Ahrens et al.,
2005&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al., 2022&lt;/a&gt;;
&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et al., 2024&lt;/a&gt;; &lt;a class="link" href="#ref-xdmf" &gt;Mark et al.,
2007&lt;/a&gt;). The Python module also offers post-processing and
analysis methods, for instance the computation of action potential
duration (APD), conduction velocity (CV), various phases, phase defect
detection, functions acting on filaments and filament trajectories, and
several plotting functions (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et al.,
2024&lt;/a&gt;).&lt;/p&gt;
&lt;div id="sec:ithildin:application"&gt;
&lt;h1 id="application-focused-numerical-methods"&gt;Application-focused numerical methods
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:ithildin:diffusionterm"&gt;&lt;/p&gt;
&lt;h2 id="diffusion-term"&gt;Diffusion term
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The diffusion term in the reaction-diffusion equation
(Eq. &lt;a class="link" href="#eq:ithildin:rde" &gt;2&lt;/a&gt;) is stated as
${{\underline{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\underline{{u}}}}$.
The conduction in cardiac tissue and hence the diffusion is stronger
along the fiber direction than normal to the fibers (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;). This is encoded in the diffusion matrix
${{\bm{{D}}}}$.&lt;/p&gt;
&lt;p&gt;As an example, in Fig. &lt;a class="link" href="#fig:ithildin:ventricles" &gt;3&lt;/a&gt;, the fiber
direction is drawn on the surface of the ventricular geometry used in
Sim. 4. The fibers are additionally colored by their fiber helix angle
(&lt;a class="link" href="#ref-streeter1969fiber" &gt;Streeter et al., 1969&lt;/a&gt;). The voxel-based
representation of this geometry was obtained by cutting a human heart
into slices, digitizing and stacking them (&lt;a class="link" href="#ref-hren1996realistic" &gt;Hren,
1996&lt;/a&gt;; &lt;a class="link" href="#ref-tentusscher2007organization" &gt;ten Tusscher et al.,
2007&lt;/a&gt;).&lt;/p&gt;
&lt;div id="fig:ithildin:ventricles"&gt;
&lt;p&gt;&lt;img alt="Ventricle geometry with fiber direction" class="gallery-image" data-flex-basis="248px" data-flex-grow="103" height="1900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/ventricles.fiber.png" srcset="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/ventricles.fiber_hu_3bd708badfdfc3e7.png 800w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/ventricles.fiber_hu_da9535088bc719f6.png 1600w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/ventricles.fiber.png 1965w" width="1965"&gt;&lt;/p&gt;
&lt;p&gt;Figure 3: &lt;strong&gt;Ventricle geometry with fiber direction&lt;/strong&gt;, colored by the
fiber helix angle.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;While the projection matrix ${{\underline{{P}}}}$ is
managed by the &lt;code&gt;Model&lt;/code&gt; class, see
section &lt;a class="link" href="#sec:ithildin:reactionterm" &gt;4.2&lt;/a&gt;, the diffusion matrix
${{\bm{{D}}}}$ and the handling of the spatial
derivatives is implemented in the &lt;code&gt;Geometry&lt;/code&gt; class. The most important
things the &lt;code&gt;Geometry&lt;/code&gt; class takes care of, are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initialization of the computational grid, along with the strides and
pointers, which are important for efficient computing;&lt;/li&gt;
&lt;li&gt;Computation of the entries of the diffusion tensor, based on the
main directions of diffusion and the respective diffusion values;&lt;/li&gt;
&lt;li&gt;Computation and storage of the weights for the stencils of the
numerical spatial derivatives
(section &lt;a class="link" href="#sec:ithildin:spatial:derivatives" &gt;2.3&lt;/a&gt;) respecting the
Neumann boundary conditions; and&lt;/li&gt;
&lt;li&gt;Handling the upper bound for the time step due to the CFL condition
(section &lt;a class="link" href="#sec:ithildin:time:integration" &gt;2.2&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;code&gt;Geometry&lt;/code&gt; class is a base class and should not be used directly to
construct a computational domain. Instead, there are several subclasses,
each representing a different type of diffusion or extrinsic shape. An
overview of the &lt;code&gt;Geometry&lt;/code&gt; subclasses is given in
Table &lt;a class="link" href="#tbl:ithildin:geometries" &gt;2&lt;/a&gt;.&lt;/p&gt;
&lt;div id="tbl:ithildin:geometries"&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;class&lt;/th&gt;
 &lt;th&gt;description&lt;/th&gt;
 &lt;th&gt;dim $N$&lt;/th&gt;
 &lt;th&gt;points in stencil&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Geometry_Iso&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;isotropic diffusion&lt;/td&gt;
 &lt;td&gt;1..3&lt;/td&gt;
 &lt;td&gt;$2N+1$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Geometry_ND&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;isotropic diffusion in higher dimensions (&lt;a class="link" href="#ref-cloet2023scroll" &gt;Cloet et al., 2023&lt;/a&gt;)&lt;/td&gt;
 &lt;td&gt;$N\in\mathbb{N}$&lt;/td&gt;
 &lt;td&gt;$2N+1$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Geometry_OrtAniso&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;orthotropic diffusion&lt;/td&gt;
 &lt;td&gt;2..3&lt;/td&gt;
 &lt;td&gt;$\begin{cases}9 &amp; N=2 \\ 19 &amp; N=3\end{cases}$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Surface&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;2D domain with extrinsic curvature&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;QuadricSurface&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;quadric surface with rotated parallel fibers&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Ellipsoid&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;ellipsoidal surface with rotated parallel fibers&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Hyperboloid&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;hyperboloidal surface with rotated parallel fibers&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Paraboloid&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;paraboloidal surface with rotated parallel fibers (&lt;a class="link" href="#ref-dierckx2013paraboloid" &gt;Dierckx et al., 2013&lt;/a&gt;)&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Table 2: &lt;strong&gt;Overview of tissue geometries supported by Ithildin&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;Geometry_ND&lt;/code&gt; class is a subclass of &lt;code&gt;Geometry_Iso&lt;/code&gt; and the
&lt;code&gt;Ellipsoid&lt;/code&gt;, &lt;code&gt;Hyperboloid&lt;/code&gt;, and &lt;code&gt;Paraboloid&lt;/code&gt; classes are subclasses of
&lt;code&gt;QuadricSurface&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The details on how the extrinsic and intrinsic curvature affect the
diffusion tensor and hence the weights for the discretized differential
operator, are discussed in the documentation of the code. There, the
different ways to initialize the available domain types are given as
well.&lt;/p&gt;
&lt;p&gt;Note that some additional features are implemented in the &lt;code&gt;Geometry&lt;/code&gt;
class, that do not have a direct link with the diffusion term, such as
inhomogeneities (section &lt;a class="link" href="#sec:ithildin:inhomogeneities" &gt;4.3&lt;/a&gt;) and
filament detection (section &lt;a class="link" href="#sec:ithildin:filaments" &gt;4.7&lt;/a&gt;).&lt;/p&gt;
&lt;div id="sec:ithildin:reactionterm"&gt;
&lt;h2 id="reaction-term"&gt;Reaction term
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;Model&lt;/code&gt; class serves as the base class for all cardiac
electrophysiology models in the Ithildin framework. It encapsulates
common functions and variables used across different models. Key
features of the &lt;code&gt;Model&lt;/code&gt; class include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Implementation of the reaction term
${{\underline{{r}}}}{{\left( {{\underline{{u}}}} \right)}}$
in the reaction-diffusion equation.&lt;/li&gt;
&lt;li&gt;Storage of model-specific metadata such as relevant citations.&lt;/li&gt;
&lt;li&gt;Handling of variable-related information, including their names,
indices, and resting values.&lt;/li&gt;
&lt;li&gt;Management of the values of the projection matrix
${{\underline{{P}}}}$.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Derived classes extend the &lt;code&gt;Model&lt;/code&gt; class to implement specific cardiac
electrophysiology models in the &lt;code&gt;reactionterm&lt;/code&gt; function.&lt;/p&gt;
&lt;p&gt;An overview of the cell models that are currently included in the source
code of this project is provided in Table &lt;a class="link" href="#tbl:ithildin:models" &gt;3&lt;/a&gt;.
More models may be added as additional classes.&lt;/p&gt;
&lt;div id="tbl:ithildin:models"&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;class&lt;/th&gt;
 &lt;th&gt;description&lt;/th&gt;
 &lt;th&gt;#vars&lt;/th&gt;
 &lt;th&gt;references&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_1VarPoly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;one-variable polynomial model&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_AP&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Aliev-Panfilov, continuous epsilon&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Aliev &amp;amp; Panfilov (&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_AP2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Aliev-Panfilov, discontinuous epsilon&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Aliev &amp;amp; Panfilov (&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_AP3&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Aliev-Panfilov, discontinuous epsilon, simple recovery&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Aliev &amp;amp; Panfilov (&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;); Pravdin et al. (&lt;a class="link" href="#ref-pravdin2015drift" &gt;2015&lt;/a&gt;); Dierckx et al. (&lt;a class="link" href="#ref-dierckx2015theory" &gt;2015&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_AP4&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Aliev-Panfilov, smoothened epsilon, simple recovery&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Aliev &amp;amp; Panfilov (&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;); Pravdin et al. (&lt;a class="link" href="#ref-pravdin2015drift" &gt;2015&lt;/a&gt;); Dierckx et al. (&lt;a class="link" href="#ref-dierckx2015theory" &gt;2015&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_BO&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bueno-Orovio 2008 4 var&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;Bueno-Orovio et al. (&lt;a class="link" href="#ref-bueno2008model" &gt;2008&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_Ba&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Barkley&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Barkley (&lt;a class="link" href="#ref-barkley1991model" &gt;1991&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_FHNa&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;FitzHugh-Nagumo (a), 2 var&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;FitzHugh (&lt;a class="link" href="#ref-fitzhugh1961impulses" &gt;1961&lt;/a&gt;); Nagumo et al. (&lt;a class="link" href="#ref-nagumo1962active" &gt;1962&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_FHNb&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;FitzHugh-Nagumo (b), 2 var&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;FitzHugh (&lt;a class="link" href="#ref-fitzhugh1961impulses" &gt;1961&lt;/a&gt;); Nagumo et al. (&lt;a class="link" href="#ref-nagumo1962active" &gt;1962&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_FHNc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;FitzHugh-Nagumo (c), 2 var&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;FitzHugh (&lt;a class="link" href="#ref-fitzhugh1961impulses" &gt;1961&lt;/a&gt;); Nagumo et al. (&lt;a class="link" href="#ref-nagumo1962active" &gt;1962&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_FK&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Fenton-Karma 3 var&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Fenton &amp;amp; Karma (&lt;a class="link" href="#ref-fenton1998vortex" &gt;1998&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_Kaz&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kazantsev PRE 2003 spiking neuron&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Kazantsev et al. (&lt;a class="link" href="#ref-kazantsev2003spiking" &gt;2003&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_LRI&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Luo-Rudy Phase I&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;Luo &amp;amp; Rudy (&lt;a class="link" href="#ref-luo1994dynamic1" &gt;1994&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_MS&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Mitchell Schaeffer&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Mitchell (&lt;a class="link" href="#ref-mitchellschaeffer2003model" &gt;2003&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_SmooKa&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Smooth Karma by Marcotte 2017&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Marcotte &amp;amp; Grigoriev (&lt;a class="link" href="#ref-marcotte2017dynamical" &gt;2017&lt;/a&gt;); Byrne et al. (&lt;a class="link" href="#ref-byrne2015exact" &gt;2015&lt;/a&gt;); Karma (&lt;a class="link" href="#ref-karma1993spiral" &gt;1993&lt;/a&gt;); Karma (&lt;a class="link" href="#ref-karma1994electrical" &gt;1994&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Model_TP06&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Ten Tusscher &amp;amp; Panfilov 2006&lt;/td&gt;
 &lt;td&gt;19&lt;/td&gt;
 &lt;td&gt;ten Tusscher &amp;amp; Panfilov (&lt;a class="link" href="#ref-ten2006alternans" &gt;2006&lt;/a&gt;); Niederer et al. (&lt;a class="link" href="#ref-niederer2019computational" &gt;2019&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Table 3: &lt;strong&gt;Overview of cell models included in Ithildin&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The Ithildin framework also introduces several &lt;code&gt;ModelWrapper&lt;/code&gt; classes
that provide additional functionality and allow for the combination of
models. These wrappers enable the recording of diffusion terms, reaction
terms, local activation times (LAT), and local deactivation times (LDT)
as additional state variables. This is done by adding code to the
reaction term calculations of the underlying model. The wrappers inherit
from the base &lt;code&gt;ModelWrapper&lt;/code&gt; class, which is a wrapper that leaves the
model unchanged. The primary &lt;code&gt;ModelWrapper&lt;/code&gt; classes are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ModelWrapper_RecordDiffusion&lt;/code&gt; records diffusion terms of selected
variables as additional variables.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ModelWrapper_RecordReaction&lt;/code&gt; records reaction terms of selected
variables as additional variables.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ModelWrapper_RecordActivationTime&lt;/code&gt; records LAT for selected
variables.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ModelWrapper_RecordDeactivationTime&lt;/code&gt; records LDT for selected
variables.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ModelWrapper_RescaleTimeSpace&lt;/code&gt; linearly rescales the wrapped model
in time and space.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ModelWrapper_RescaleVars&lt;/code&gt; linearly rescales selected state
variables of the wrapped model.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;code&gt;Model_multi&lt;/code&gt; class enables the combination of multiple submodels
into a single model. The behavior of the combined model may vary
depending on the location ${{\bm{{x}}}}$ and is
determined by one of its submodels. Which model is to be used depends on
the integer value of the &lt;code&gt;inhom&lt;/code&gt; field, which is used to describe
spatial inhomogeneities, such as obstacles. Inhomogeneities will be
further explained in the following, cf.
section &lt;a class="link" href="#sec:ithildin:inhomogeneities" &gt;4.3&lt;/a&gt;. This class is particularly
useful for simulating scenarios where different regions of cardiac
tissue exhibit distinct behaviors.&lt;/p&gt;
&lt;p&gt;The Ithildin C++ framework provides a structured and modular approach to
modeling cardiac electrophysiology. The &lt;code&gt;Model&lt;/code&gt; class serves as the base
for different models, while various &lt;code&gt;ModelWrapper&lt;/code&gt; classes and the
&lt;code&gt;Model_multi&lt;/code&gt; class offer extended functionalities for recording and
combining different model aspects.&lt;/p&gt;
&lt;div id="sec:ithildin:inhomogeneities"&gt;
&lt;h2 id="inhomogeneities"&gt;Inhomogeneities
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In simulations of cardiac electrophysiology, accurately modeling the
spatial properties of the cardiac tissue is essential. Inhomogeneities
represent variations in the tissue&amp;rsquo;s characteristics, such as its
electrical conductivity or cellular properties, that influence the
propagation of electrical signals.&lt;/p&gt;
&lt;p&gt;An inhomogeneity in the Ithildin framework is a distinct region within
the simulation domain with different properties compared to its
surroundings. In the context of cardiac electrophysiology, these
properties could correspond to variations in the electrical
conductivities of cells, cellular properties, or even the absence of
excitable cells altogether. Inhomogeneities are defined by an integer
field called &lt;code&gt;inhom&lt;/code&gt; associated with each point in the domain. Grid
points with a non-zero &lt;code&gt;inhom&lt;/code&gt; value are considered &lt;em&gt;interior points&lt;/em&gt;,
indicating that the reaction-diffusion equation needs to be solved on
these points. If the selected reaction term is a &lt;code&gt;Model_multi&lt;/code&gt; (see also
section &lt;a class="link" href="#sec:ithildin:reactionterm" &gt;4.2&lt;/a&gt;), for an &lt;code&gt;inhom&lt;/code&gt; value of
$n$, the $n$th submodel will be
used for this point. For example, in Fig. &lt;a class="link" href="#fig:ithildin:trajectory" &gt;4&lt;/a&gt;,
the &lt;code&gt;inhom&lt;/code&gt; field for Sim. 1 is visualized. Two different cell models
are used for the values 1 and 2. The points where &lt;code&gt;inhom&lt;/code&gt; has the value
0, are considered &lt;em&gt;exterior points&lt;/em&gt;. The set of all interior points is
the physical domain $\Omega$. At the boundary of the
physical domain, Neumann boundary conditions are applied.&lt;/p&gt;
&lt;div id="fig:ithildin:trajectory"&gt;
&lt;p&gt;&lt;img alt="Inhomogeneities in Sim.\u00a01" class="gallery-image" data-flex-basis="460px" data-flex-grow="191" height="1061" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/trajectory.png" srcset="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/trajectory_hu_9bca9c5985993302.png 800w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/trajectory_hu_d28748b76d70e099.png 1600w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/trajectory.png 2035w" width="2035"&gt;&lt;/p&gt;
&lt;p&gt;Figure 4: &lt;strong&gt;Inhomogeneities in Sim. 1.&lt;/strong&gt; The field &lt;code&gt;inhom&lt;/code&gt; describes
where unexcitable obstacles or exterior points are located with the
value &lt;code&gt;inhom = 0&lt;/code&gt; and which cell model is to be used inside if
&lt;code&gt;inhom &amp;gt; 0&lt;/code&gt;. This figure also visualizes the filament trajectories
colored by time, cf. section &lt;a class="link" href="#sec:ithildin:filaments" &gt;4.7&lt;/a&gt;. Birth of a
tip is denoted by stars, their deaths by crosses, and tips that are
still around at the end of the simulation by points. The three
trajectories with the longest lifetime are numbered by indices 0 through
2.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;To incorporate inhomogeneities into the simulation, the framework
provides methods to add them to the domain. These methods allow
specifying the shape, location, and properties of each inhomogeneity.
For example, a rectangular inhomogeneity could be added by specifying
its width, height and location.&lt;/p&gt;
&lt;div id="stimulation-protocols"&gt;
&lt;h2 id="stimulation-protocols"&gt;Stimulation protocols
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Ithildin provides a flexible way to define stimulation protocols using
the &lt;code&gt;Stimulus&lt;/code&gt; and &lt;code&gt;Trigger&lt;/code&gt; classes, as well as the scheduling
functionality of the &lt;code&gt;Source&lt;/code&gt; class.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Stimulus&lt;/code&gt; class enables the specification of temporal and spatial
characteristics of voltage-based or current-based stimuli. It allows
defining which state variables should be affected directly, the
associated values, and whether the stimulus sets the variable directly
or whether it is additive and hence behaving like a current source.
Temporal modulation of stimulus strength is achieved through the
&lt;code&gt;amplitude&lt;/code&gt; function, while spatial constraints are managed by the
&lt;code&gt;shape&lt;/code&gt; function, an instance of the &lt;code&gt;Shape&lt;/code&gt; class.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Shape&lt;/code&gt; class describes a geometric shape via its characteristic
function which can be used to define regions of interest in a simulation
domain. The core principle is that the function evaluates a given
position vector and returns a value: 1 if the position is inside the
defined shape, and 0 if it is outside. However, values in the range
${{\left[ 0,1 \right]}}$ may also be used to create a
smooth transition. A smoothly varying characteristic function may be
useful to create more-realistic stimuli that deposit current in a smooth
profile. This simple yet powerful concept forms the basis for
constructing intricate spatial configurations.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Shape&lt;/code&gt; class provides several pre-defined shape functions, though
additional shapes can easily be added by defining a characteristic
function:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ellipsoid&lt;/strong&gt;: Defined by radii, a center and optionally the Euler
angles, this shape represents a general three-dimensional ellipsoid
with the specified orientation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sphere&lt;/strong&gt;: A special case of an ellipsoid where all radii are
equal, forming a three-dimensional sphere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ellipse in $xy$-plane&lt;/strong&gt;: This two-dimensional
shape resembles an ellipse lying on the
$xy$-plane, defined by radii and a center.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cylinder along $z$-axis&lt;/strong&gt;: Representing a
three-dimensional cylinder centered along the
$z$-axis, this shape is defined by a radius and a
center. In 2D, it defines a disk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rectangular cuboid&lt;/strong&gt;: Defining a three-dimensional region, this
shape is specified by two opposing corner points, creating a cuboid.
In 2D, it defines a rectangle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Half plane&lt;/strong&gt;: A plane defined by an origin and an outward normal
vector splits the three-dimensional space into a half-space. In 2D,
a straight line splits the plane in a similar way.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Characteristic functions can also be loaded from files in the NPY format
(&lt;a class="link" href="#ref-numpy" &gt;Harris et al., 2020&lt;/a&gt;). This feature facilitates the
incorporation of custom shapes derived from external data sources.&lt;/p&gt;
&lt;p&gt;The scheduling functionality via &lt;code&gt;Source::schedule&lt;/code&gt; offers the ability
to execute functions at specified points in time during the simulations.
This feature greatly enhances experimental flexibility by allowing the
execution of arbitrary code snippets at chosen moments during
simulations. The scheduler is especially useful for introducing dynamic
changes to the simulation environment, such as modifying stimuli or
conditions mid-simulation.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Trigger&lt;/code&gt; class provides a means to orchestrate actions based on
specific conditions. Triggers encapsulate the decision-making process of
when to execute a particular action, influenced by condition checks and
coordination modes. Different coordination modes allow for the
synchronization of trigger actions across multiple processes,
facilitating complex simulations of activation waves. These modes are to
trigger on each process individually once the condition is met, once the
condition is met in a specific process, once the condition is met in any
process, or once it is true in all processes.&lt;/p&gt;
&lt;p&gt;Within the framework of cardiac electrophysiology, triggers are
essential for defining stimulation protocols, e.g. for the S1S2
protocol, which is illustrated in Fig. &lt;a class="link" href="#fig:ithildin:s1s2" &gt;5&lt;/a&gt;: After a
first excitation wave passes a sensor position, a second wave is
triggered behind a part of the first waveback to stimulate spiral waves.&lt;/p&gt;
&lt;div id="fig:ithildin:s1s2"&gt;
&lt;p&gt;&lt;img alt="The S1S2 protocol illustrated for Sim.\u00a02" class="gallery-image" data-flex-basis="259px" data-flex-grow="108" height="2041" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/s1s2.png" srcset="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/s1s2_hu_658c676a5613baa8.png 800w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/s1s2_hu_5d6259cefc78c8e0.png 1600w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/s1s2.png 2211w" width="2211"&gt;&lt;/p&gt;
&lt;p&gt;Figure 5: &lt;strong&gt;The S1S2 protocol illustrated for Sim. 2.&lt;/strong&gt; The first and
third row display the transmembrane voltage $u$ at
selected frames in time, and the second and fourth row the state space
phase (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;). The first stimulus is applied in the
first frame in the hatched region at the left edge. The sensor location
is marked with a cross. Right after the third frame, the sensor triggers
the second stimulus in the hatched region at the bottom edge. A spiral
wave forms. The phase singularity at the center of the spiral is tracked
as the curve, which is dotted for the entire trajectory of the phase
singularity, and solid for its trajectory since the previous frame.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:ithildin:history"&gt;&lt;/p&gt;
&lt;h2 id="recording-temporal-evolution-of-variables-at-sensor-positions"&gt;Recording temporal evolution of variables at sensor positions
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Besides the sensors for triggering stimuli, sensors in the context of
this simulation framework are components that monitor and record the
state variables of the simulated system at chosen positions during the
simulation. We call this the &lt;em&gt;history&lt;/em&gt; at a given sensor position.&lt;/p&gt;
&lt;p&gt;These sensors are used to gather data about the behavior of the system
at particular time intervals, regulated by the &lt;code&gt;sensorlag&lt;/code&gt; parameter.
This parameter controls the frequency at which sensor data is collected,
allowing for flexibility in recording intervals. Notably, the recording
frequency set by &lt;code&gt;sensorlag&lt;/code&gt; need not align with the simulation&amp;rsquo;s time
step or the duration between frames. The data will be recorded at the
first time step after the specified &lt;code&gt;sensorlag&lt;/code&gt; duration. This
high-resolution temporal data can be used to study individual points in
the medium in detail.&lt;/p&gt;
&lt;p&gt;The recorded data are then written to designated comma separated value
(CSV) output files associated with each sensor. These files are used to
store the collected data over the course of the simulation.&lt;/p&gt;
&lt;p&gt;The first four panels of Fig. &lt;a class="link" href="#fig:ithildin:curves" &gt;6&lt;/a&gt; contain time
traces of the transmembrane voltage $u$, the
restitution variable $v$, the recorded value of the
diffusion term, and the LAT at a given sensor position for Sim. 1. The
times of the three stimuli are indicated by the black vertical lines.
The other panels will be explained in the subsequent sections.&lt;/p&gt;
&lt;div id="fig:ithildin:curves"&gt;
&lt;p&gt;&lt;img alt="Extracted time traces of Sim.\u00a01" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/curves.png" srcset="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/curves_hu_4dbcec34c1b09ad4.png 800w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/curves.png 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;Figure 6: &lt;strong&gt;Extracted time traces of Sim. 1.&lt;/strong&gt; The first two panels (a,
b) contain the model variables $u$ and
$v$, followed by data computed by model wrappers,
namely the diffusion term
$\nabla \cdot {{\bm{{D}}}} \nabla u$ (c) and the LAT
(d), at an interior point, cf. section &lt;a class="link" href="#sec:ithildin:history" &gt;4.5&lt;/a&gt;.
Panel (e) contains the pseudo-EGM at an exterior point, next to the 2D
domain, cf. section &lt;a class="link" href="#sec:ithildin:egm" &gt;4.6&lt;/a&gt;. The last panel (f)
contains the number of rotors detected via phase singularities,
cf. section &lt;a class="link" href="#sec:ithildin:filaments" &gt;4.7&lt;/a&gt;. The black vertical lines
indicate times at which a stimulus was applied.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:ithildin:egm"&gt;&lt;/p&gt;
&lt;h2 id="pseudo-egms"&gt;Pseudo-EGMs
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The EGM is a measurement of the potential generated by the charge
distribution in cardiac tissue over time at a point in space, outside
the tissue. In theory, this is a measurement of the extracellular
potential ${\Phi_\text{e}}$. However, since Ithildin
is a monodomain solver, the extracellular potential is not part of the
model equations (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;). The
code therefore calculates an approximation of the extracellular
potential at points outside the mesh using the &lt;code&gt;Egm&lt;/code&gt; class. To obtain
this approximation, the pseudo-bidomain theory is used (&lt;a class="link" href="#ref-bishop2011egm" &gt;Bishop &amp;amp; Plank,
2011&lt;/a&gt;). The approximation, referred to as a
pseudo-EGM, uses the simplifications that the intracellular and
extracellular conductivities are proportional, such that there is an
explicit formula to calculate the extracellular potential, and that the
bath conductivity is homogeneous.&lt;/p&gt;
&lt;p&gt;The extracellular potential ${\Phi_\text{e}}$ at
position ${{\bm{{x}}}}_\text{e}$ over time is then
calculated as: &lt;span id="eq:ithildin:egm"&gt;$$
{\Phi_\text{e}}{{\left( {{\bm{{x}}}}_\text{e},t \right)}}
=
\frac{
 \tau_\text{e}
}{
 4\pi
}
\int_{\Omega}\mathrm{d}{{\bm{{x}}}}\;
\frac{
 \nabla \cdot {{\bm{{D}}}} \nabla u({{\bm{{x}}}},t)
}{
 {{\left\lVert {{\bm{{x}}}}_\text{e} - {{\bm{{x}}}} \right\rVert}}
}
\qquad{(8)}$$&lt;/span&gt; where
$\Omega$ denotes the computational domain, i.e., the
simulated heart muscle tissue, $u$ is a state
variable of the model representing the transmembrane potential, , which
is usually encoded as the first variable in the state vector
${{\underline{{u}}}}$. Furthermore,
${{\bm{{D}}}}$ is the diffusion matrix from the
reaction-diffusion equation (Eq. &lt;a class="link" href="#eq:ithildin:rde" &gt;2&lt;/a&gt;), and
$\tau_\text{e}$ is a proportionality factor with
units ${\mathrm{{m}{s}}}$.&lt;/p&gt;
&lt;p&gt;Essentially, the used approximation for the EGM is a convolution of the
diffusion term $\nabla \cdot {{\bm{{D}}}} \nabla u$
for the first variable with a kernel
${{\left\lVert {{\bm{{x}}}}_\text{e} - {{\bm{{x}}}} \right\rVert}}^{-1}$.
Depending on the choice of the diffusion tensor, made by the user in the
&lt;code&gt;Geometry&lt;/code&gt; class (section &lt;a class="link" href="#sec:ithildin:diffusionterm" &gt;4.1&lt;/a&gt;), a
different prefactor of the integral is required. Hence, the prefactor
$\frac{\tau_\text{e}}{4\pi}$ is user-defined and can
be changed using the function &lt;code&gt;set_prefactor&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The integral in Eq. &lt;a class="link" href="#eq:ithildin:egm" &gt;8&lt;/a&gt; is discretized and its
calculation is implemented such that the additional amount of storage
and number of calculations is limited as much as possible. For instance,
as the required diffusion term
$\nabla \cdot {{\bm{{D}}}} \nabla V_\text{m}$ is
already computed during the forward stepping of the reaction-diffusion
equation, it can be stored as an additional state variable using a
&lt;code&gt;ModelWrapper_RecordDiffusion&lt;/code&gt; and subsequently used in the pseudo-EGM
calculation. This model wrapper is essential for the functioning of the
&lt;code&gt;Egm&lt;/code&gt; class and hence is a requirement when setting up a simulation with
pseudo-EGM calculation.&lt;/p&gt;
&lt;p&gt;The result is a CSV file with the pseudo-EGM data for each electrode
that is defined by the user. The computed pseudo-EGM at a given position
for Sim. 1 is displayed in the fifth panel of
Fig. &lt;a class="link" href="#fig:ithildin:curves" &gt;6&lt;/a&gt;.&lt;/p&gt;
&lt;div id="sec:ithildin:filaments"&gt;
&lt;h2 id="filaments"&gt;Filaments
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Formally, filaments can be understood as a line of wave break, i.e., a
line where an activation and recovery surface come together (&lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et
al., 2006&lt;/a&gt;; &lt;a class="link" href="#ref-winfree1994electrical" &gt;Winfree,
1994&lt;/a&gt;). The activation surface can be seen
as the wavefront, while the recovery surface can be seen as the
waveback. When considering an excitable system in 2D, filaments become
tips, being the point of intersection between the activation and
recovery curve. Since a point cannot be excited and recovering at the
same time, points on a filament are also called &lt;em&gt;phase singularities&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Using this definition of filament points, detection algorithms have been
designed. Our code relies on the one described by Fenton &amp;amp; Karma
(&lt;a class="link" href="#ref-fenton1998vortex" &gt;1998&lt;/a&gt;). Additionally, this algorithm has been
extended to grids in any dimension, where the generalization of
filaments are called &lt;em&gt;superfilaments&lt;/em&gt; (&lt;a class="link" href="#ref-cloet2023scroll" &gt;Cloet et al.,
2023&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The filament point detection algorithm is included in the &lt;code&gt;Geometry&lt;/code&gt;
class. Its goal is to compute the points where the wavefront and
waveback meet. While looping over all coordinate planes and grid points,
it is checked whether there is an intersection of isolines in the
adjacent voxel faces of a grid point. The location of the filament point
is then estimated by bi-linear interpolation. An illustrative sketch of
this method is given in Fig. &lt;a class="link" href="#fig:ithildin:filament" &gt;7&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:ithildin:filament"&gt;
&lt;p&gt;&lt;img alt="Illustration of the filament point tracking algorithm" class="gallery-image" data-flex-basis="372px" data-flex-grow="155" height="368" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/filament.png" width="571"&gt;&lt;/p&gt;
&lt;p&gt;Figure 7: &lt;strong&gt;Illustration of the filament point tracking algorithm.&lt;/strong&gt;
Each coordinate plane adjacent to a grid point
$(i,j,k)$ is checked for an intersection of two
surfaces (purple and orange lines) which are usually isosurfaces of
state variables in ${{\underline{{u}}}}$. In this
example, a filament point (dot) will be found in the
$yz$-face.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The last panel in Fig. &lt;a class="link" href="#fig:ithildin:curves" &gt;6&lt;/a&gt; displays the number of
rotors over time for Sim. 1, which are found via filament detection. It
can be seen that at the S2 stimulus, a single rotor is formed, and
subsequently pairs of rotors as figure-of-eight spiral pairs.&lt;/p&gt;
&lt;p&gt;More details of this process can be seen in
Fig. &lt;a class="link" href="#fig:ithildin:trajectory" &gt;4&lt;/a&gt; which shows the trajectories of these
filaments in Sim. 1 tracked using the Python module for Ithildin. The
trajectories are colored by time and the formation of a new tip is
denoted by stars and their decay by crosses. Tips that still persist at
the final frame of the simulation are indicated by points. The tip
trajectory denoted with index 0 is formed by the S1S2 protocol and
meanders around the medium. It persists until the end of the simulation.
The figure-of-eight spiral wave pair denoted by indices 1 and 2 is
formed by a conduction block breaking up. The spiral tip with index 2
runs into the boundary to disintegrate there.&lt;/p&gt;
&lt;div id="phase-defects"&gt;
&lt;h2 id="phase-defects"&gt;Phase defects
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;While a phase singularity can be seen as points where all phases
meet&amp;mdash;in mathematics called a &lt;em&gt;pole&lt;/em&gt;, a phase defect is a point at
which there is a discrete jump from one phase value to another in an
otherwise continuously varying phase. While phase defects are well known
in physics, they were only recently identified in excitable media,
within linear-core rotors and conduction block regions (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al., 2021&lt;/a&gt;).
Phase defects are lines in 2D and surfaces in 3D.&lt;/p&gt;
&lt;p&gt;In Ithildin, the phase defect detection is done with its Python module.
For instance, during simulation, Ithildin can record the local
activation times (LAT) which can then be used to compute the activation
time phase in post-processing (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;;
&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al., 2022&lt;/a&gt;). A variety of methods
exist to then localize the phase defect (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al.,
2021&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Two examples for phase defect detection in Sim. 1 are given in
Fig. &lt;a class="link" href="#fig:ithildin:defect:spiral" &gt;8&lt;/a&gt; and
Fig. &lt;a class="link" href="#fig:ithildin:defect:cbl" &gt;9&lt;/a&gt;. Both display four frames over time
of the transmembrane voltage $V_\text{m}$, the
activation time phase ${\varphi}$, and the phase
defect $\rho$ computed via the cosine method (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus
et al., 2022&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al.,
2021&lt;/a&gt;). In Fig. &lt;a class="link" href="#fig:ithildin:defect:spiral" &gt;8&lt;/a&gt;,
the phase defect of a single spiral wave is tracked. It can be seen that
the phase defect extends due to conduction block such that the spiral
wave moves across the domain. In Fig. &lt;a class="link" href="#fig:ithildin:defect:cbl" &gt;9&lt;/a&gt;, the
break-up of a conduction block line into a figure-of-eight spiral wave
pair can be seen. The conduction block line is a phase defect of zero
topological charge (&lt;a class="link" href="#ref-arno2024feynman" &gt;Arno et al., 2024a&lt;/a&gt;;
&lt;a class="link" href="#ref-goryachev1996spiral" &gt;Goryachev &amp;amp; Kapral, 1996&lt;/a&gt;; &lt;a class="link" href="#ref-mermin1979topological" &gt;Mermin,
1979&lt;/a&gt;) which, in this case, reaches a
critical length breaking apart into two oppositely charged spiral waves
with much shorter phase defect lines.&lt;/p&gt;
&lt;p&gt;In Fig. &lt;a class="link" href="#fig:ithildin:bocf3d:volume" &gt;10&lt;/a&gt;, we present the final frame of
Sim. 4 in ventricular geometry, visualized with ParaView (&lt;a class="link" href="#ref-paraview" &gt;Ahrens et
al., 2005&lt;/a&gt;). It is colored by the normalized
transmembrane voltage. Both, the classical tip and the phase defect
surface are visualized. The spiral waves revolve around the phase defect
surfaces.&lt;/p&gt;
&lt;div id="fig:ithildin:defect:spiral"&gt;
&lt;p&gt;&lt;img alt="Phase defect detection for a single meandering spiral in Sim.\u00a01" class="gallery-image" data-flex-basis="433px" data-flex-grow="180" height="1478" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/defect.spiral.png" srcset="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/defect.spiral_hu_909eb5260acf5029.png 800w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/defect.spiral_hu_fa602e92ad802518.png 1600w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/defect.spiral_hu_906182d6b3887a25.png 2400w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/defect.spiral.png 2668w" width="2668"&gt;&lt;/p&gt;
&lt;p&gt;Figure 8: &lt;strong&gt;Phase defect detection for a single meandering spiral in
Sim. 1.&lt;/strong&gt; By recording the activation times of the transmembrane voltage
$V_\text{m}$ (top row), the activation time phase
${\varphi}$ (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al.,
2021&lt;/a&gt;) can be computed (middle row). Where this
phase is discontinuous, a phase defect is localized. This is visualized
as the phase defect density $\rho$ (bottom row). In
these four frames, a single rotor is tracked shortly after its
formation. Due to conduction block, which can be seen as an extended
phase defect line, the spiral moves through the medium. Afterwards, the
spiral remains mostly stationary, leading to a shorter phase defect
line.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="fig:ithildin:defect:cbl"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Phase defect detection during figure-of-eight spiral wave pair creation in Sim.\u00a01" class="gallery-image" data-flex-basis="433px" data-flex-grow="180" height="1478" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/defect.cbl.png" srcset="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/defect.cbl_hu_f799f103c7e09bad.png 800w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/defect.cbl_hu_ea2c8570dfbb093a.png 1600w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/defect.cbl_hu_6ea3f04e324d88e1.png 2400w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/defect.cbl.png 2668w" width="2668"&gt;&lt;/p&gt;
&lt;p&gt;Figure 9: &lt;strong&gt;Phase defect detection during figure-of-eight spiral wave
pair creation in Sim. 1.&lt;/strong&gt; Visualization in the same style as
Fig. &lt;a class="link" href="#fig:ithildin:defect:spiral" &gt;8&lt;/a&gt;. A long conduction block line
breaks apart into two rotors.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="fig:ithildin:bocf3d:volume"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Final frame of Sim.\u00a04 of the BOCF model in ventricle geometry" class="gallery-image" data-flex-basis="242px" data-flex-grow="100" height="1915" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/bocf3d.volume.png" srcset="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/bocf3d.volume_hu_ee3fc02a98a04c67.png 800w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/bocf3d.volume_hu_2cf3ffdce60a2bfd.png 1600w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/bocf3d.volume.png 1933w" width="1933"&gt;&lt;/p&gt;
&lt;p&gt;Figure 10: &lt;strong&gt;Final frame of Sim. 4 of the BOCF model in ventricle
geometry.&lt;/strong&gt; The classical filament is plotted as the purple lines. The
phase defect surface is contained in the gray contour.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="further-documentation"&gt;&lt;/p&gt;
&lt;h2 id="further-documentation"&gt;Further documentation
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;More complete documentation of Ithildin can be generated with Doxygen
(&lt;a class="link" href="#ref-doxygen" &gt;van Heesch, 2023&lt;/a&gt;) and can be also found online, see the
data availability statement for details. The documentation contains
detailed information on how to get started installing and working with
ithildin.&lt;/p&gt;
&lt;div id="sec:ithildin:results"&gt;
&lt;h1 id="results"&gt;Results
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Ithildin is used for numerical experiments in various use cases. For
instance, it was used to study the structure of the core of rotors
emerging in in-silico cardiac-electrophysiology cell models, leading to
the description of phase defect lines (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;, &lt;a class="link" href="#ref-arno2024feynman" &gt;2024a&lt;/a&gt;,
&lt;a class="link" href="#ref-arno2024strings" &gt;2024b&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;). Also, higher-dimensional rotors waves
were simulated and the emerging super-filaments were detected using
Ithildin (&lt;a class="link" href="#ref-cloet2023scroll" &gt;Cloet et al., 2023&lt;/a&gt;). In the creation
of novel data-driven cell models using state space expansion, Ithildin
was used to generate synthetic training data sets (&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et
al., 2024&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Five simulations were conducted for this paper to illustrate the
features of Ithildin. An overview of the simulations is given in
Table &lt;a class="link" href="#tbl:ithildin:sims" &gt;4&lt;/a&gt;, along with references to the figures that
were generated with these data sets while details on their simulation
setup can be found in their C++ code in the appendix.&lt;/p&gt;
&lt;div id="tbl:ithildin:sims"&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;simulation&lt;/th&gt;
 &lt;th&gt;Sim. 1&lt;/th&gt;
 &lt;th&gt;Sim. 2&lt;/th&gt;
 &lt;th&gt;Sim. 3&lt;/th&gt;
 &lt;th&gt;Sim. 4&lt;/th&gt;
 &lt;th&gt;Sim. 5&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;cell model&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SmooKa&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;AP&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;BO&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;BO&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;TP06&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;parameter set&lt;/td&gt;
 &lt;td&gt;default&lt;/td&gt;
 &lt;td&gt;default&lt;/td&gt;
 &lt;td&gt;EPI&lt;/td&gt;
 &lt;td&gt;EPI&lt;/td&gt;
 &lt;td&gt;EPI&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;references&lt;/td&gt;
 &lt;td&gt;&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
 &lt;td&gt;&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
 &lt;td&gt;&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
 &lt;td&gt;&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
 &lt;td&gt;&lt;sup id="fnref:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;dimensions&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;anisotropy type&lt;/td&gt;
 &lt;td&gt;isotropic&lt;/td&gt;
 &lt;td&gt;isotropic&lt;/td&gt;
 &lt;td&gt;isotropic&lt;/td&gt;
 &lt;td&gt;orthotropic&lt;/td&gt;
 &lt;td&gt;orthotropic&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;diffusivity $P_{uu}$&lt;/td&gt;
 &lt;td&gt;0.031&lt;/td&gt;
 &lt;td&gt;1.6&lt;/td&gt;
 &lt;td&gt;0.12&lt;/td&gt;
 &lt;td&gt;0.12&lt;/td&gt;
 &lt;td&gt;0.1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ratio $D_\parallel / D_\perp$&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;4.0&lt;/td&gt;
 &lt;td&gt;7.6&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;inhomogeneities&lt;/td&gt;
 &lt;td&gt;sphere, rectangle, waves&lt;/td&gt;
 &lt;td&gt;none&lt;/td&gt;
 &lt;td&gt;none&lt;/td&gt;
 &lt;td&gt;biventricular geometry&lt;/td&gt;
 &lt;td&gt;none&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;grid size&lt;/td&gt;
 &lt;td&gt;100×70&lt;/td&gt;
 &lt;td&gt;120×120&lt;/td&gt;
 &lt;td&gt;450×450&lt;/td&gt;
 &lt;td&gt;168×208×231&lt;/td&gt;
 &lt;td&gt;various&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;spacing [mm]&lt;/td&gt;
 &lt;td&gt;$0.2, 0.2$&lt;/td&gt;
 &lt;td&gt;$1, 1$&lt;/td&gt;
 &lt;td&gt;$0.3, 0.3$&lt;/td&gt;
 &lt;td&gt;$0.43, 0.43, 0.5$&lt;/td&gt;
 &lt;td&gt;various&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;time step [ms]&lt;/td&gt;
 &lt;td&gt;0.1&lt;/td&gt;
 &lt;td&gt;0.1&lt;/td&gt;
 &lt;td&gt;0.1&lt;/td&gt;
 &lt;td&gt;0.1&lt;/td&gt;
 &lt;td&gt;various&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;stim. times [ms]&lt;/td&gt;
 &lt;td&gt;0, 600, 921&lt;/td&gt;
 &lt;td&gt;0, 426&lt;/td&gt;
 &lt;td&gt;0, 394.1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;duration [ms]&lt;/td&gt;
 &lt;td&gt;2000.1&lt;/td&gt;
 &lt;td&gt;838.6&lt;/td&gt;
 &lt;td&gt;680.1&lt;/td&gt;
 &lt;td&gt;600.1&lt;/td&gt;
 &lt;td&gt;150.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;used in&lt;/td&gt;
 &lt;td&gt;Figs. &lt;a class="link" href="#fig:ithildin:flowchart" &gt;1&lt;/a&gt;, &lt;a class="link" href="#fig:ithildin:trajectory" &gt;4&lt;/a&gt;, &lt;a class="link" href="#fig:ithildin:curves" &gt;6&lt;/a&gt;, &lt;a class="link" href="#fig:ithildin:defect:spiral" &gt;8&lt;/a&gt;, &lt;a class="link" href="#fig:ithildin:defect:cbl" &gt;9&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Fig. &lt;a class="link" href="#fig:ithildin:s1s2" &gt;5&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Sim. 4&lt;/td&gt;
 &lt;td&gt;Figs. &lt;a class="link" href="#fig:ithildin:flowchart" &gt;1&lt;/a&gt;, &lt;a class="link" href="#fig:ithildin:ventricles" &gt;3&lt;/a&gt;, &lt;a class="link" href="#fig:ithildin:bocf3d:volume" &gt;10&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Fig. &lt;a class="link" href="#fig:ithildin:benchmark" &gt;11&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Table 4: &lt;strong&gt;Overview of the numerical simulations used in this paper&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="cardiac-electrophysiology-benchmark"&gt;&lt;/p&gt;
&lt;h2 id="cardiac-electrophysiology-benchmark"&gt;Cardiac electrophysiology benchmark
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Niederer et al. (&lt;a class="link" href="#ref-niederer2011verification" &gt;2011&lt;/a&gt;) proposed a
benchmark problem that is now used by the in-silico modelling community
to validate and compare cardiac electrophysiology solvers (&lt;a class="link" href="#ref-campos2016lattice" &gt;Campos et
al., 2016&lt;/a&gt;; &lt;a class="link" href="#ref-niederer2011verification" &gt;Niederer et al.,
2011&lt;/a&gt;). Ithildin passes the benchmark as
implemented in Sim. 5. In the benchmark problem an excitation wave
travels through a cuboid-shaped medium following the cell model by ten
Tusscher &amp;amp; Panfilov (&lt;a class="link" href="#ref-ten2006alternans" &gt;2006&lt;/a&gt;). In
Fig. &lt;a class="link" href="#fig:ithildin:benchmark" &gt;11&lt;/a&gt;, we present the results from the
benchmark in a similar way as in the original publication introducing
the benchmark (&lt;a class="link" href="#ref-niederer2011verification" &gt;Niederer et al., 2011&lt;/a&gt;):
Point $P_1={{{{\left[ 0,0,0 \right]}}}^\mathrm{T}}$
is the corner of the cuboid where the stimulus is applied and
$P_8={{{{\left[ 20,7,3 \right]}}}^\mathrm{T}}{\mathrm{{m}{m}}}$
the furthest-away opposite corner. Consider the plane going through
$P_1$ and $P_8$ as well as
$P_{10}={{{{\left[ 0,7,1.5 \right]}}}^\mathrm{T}}{\mathrm{{m}{m}}}$.
We call the distance along the long axis of the plane slicing through
the cubioid $\xi_1$ and the short axis
$\xi_2$. In the panels (a), the LAT on this plane is
shown for the benchmark simulation at high and low resolution in space,
$\Delta x = {0.1~\mathrm{{m}{m}}}$ and
$\Delta x = {0.5~\mathrm{{m}{m}}}$ respectively, at
the same temporal resolution
$\Delta t = {0.005~\mathrm{{m}{s}}}$. Panel (b) also
shows the LAT on the line from $P_1$ to
$P_8$ for the different spatial resolutions
$\Delta x \in {{\left\{{0.1~\mathrm{{m}{m}}}, {0.2~\mathrm{{m}{m}}}, {0.5~\mathrm{{m}{m}}} \right\}}}$
at the same temporal resolution. In panel (c), the LAT value at
$P_8$ is compared across all the combinations of
spatial and temporal resolution. Just like for most other solvers which
are compared in the benchmark paper, it can be seen that at the coarsest
spatial resolution, the excitation wave is slowed down significantly in
the transversal direction (&lt;a class="link" href="#ref-niederer2011verification" &gt;Niederer et al.,
2011&lt;/a&gt;). Similarly to the other
finite-difference solvers, the simulation fails at
$\Delta t = {0.05~\mathrm{{m}{m}}}$ and
$\Delta x = {0.1~\mathrm{{m}{m}}}$ (&lt;a class="link" href="#ref-niederer2011verification" &gt;Niederer et al.,
2011&lt;/a&gt;), due to numerical instability.
When a check of the CFL condition is enabled
(Eq. &lt;a class="link" href="#eq:ithildin:cfl" &gt;5&lt;/a&gt;), Ithildin suggests to lower
$\Delta t$ to given this spatial resolution, leading
to a simulation at which no instability is observed.&lt;/p&gt;
&lt;p&gt;Panel (d) of Fig. &lt;a class="link" href="#fig:ithildin:benchmark" &gt;11&lt;/a&gt; shows the speed-up in
computation time from parallelization by comparing the computation time
for Sim. 5 at $\Delta x = {0.2~\mathrm{{m}{m}}}$ and
$\Delta t = {0.01~\mathrm{{m}{s}}}$ on an 8-core
Intel i7-10875H processor using 1, 2, 4, and 8 processes. In the
double-logarithmic plot, it can be seen with linear regression that the
computational speed increases almost linearly going from one to four
processes, $t_\text{sim} \propto N_\text{proc}^{-p}$
with $p \approx 1$. Going to eight processes leads to
diminishing returns, resulting in a smaller speed-up in computational
time, as the overhead due to the boundary-exchange between processes
grows. On this system using eight processes, at
$\Delta x = {0.2~\mathrm{{m}{m}}}$ and
$\Delta t = {0.01~\mathrm{{m}{s}}}$, solving the
benchmark problem takes ${65.733~\mathrm{s}}$ of
computation time in Ithildin, while it takes
${611.231~\mathrm{s}}$ in cbcbeat (&lt;a class="link" href="#ref-cbcbeat" &gt;Rognes et al.,
2017&lt;/a&gt;). For both codes, we have turned off output to the
disk and included the initial setup of the problem, such as compilation
and memory allocation.&lt;/p&gt;
&lt;div id="fig:ithildin:benchmark"&gt;
&lt;p&gt;&lt;img alt="Results of the cardiac electrophysiology benchmark" class="gallery-image" data-flex-basis="265px" data-flex-grow="110" height="2394" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/niederer2011benchmark.png" srcset="https://kabus.eu/2024/09/19/kabus2024ithildin/figures/niederer2011benchmark_hu_53b335997ce533c2.png 800w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/niederer2011benchmark_hu_968dce7e6a11ff45.png 1600w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/niederer2011benchmark_hu_be3563a13995a7ba.png 2400w, https://kabus.eu/2024/09/19/kabus2024ithildin/figures/niederer2011benchmark.png 2647w" width="2647"&gt;&lt;/p&gt;
&lt;p&gt;Figure 11: &lt;strong&gt;Results of the cardiac electrophysiology benchmark.&lt;/strong&gt; The
benchmark was proposed by Niederer et al.
(&lt;a class="link" href="#ref-niederer2011verification" &gt;2011&lt;/a&gt;) and is implemented in Sim. 5. To
ease comparisons with the paper introducing the benchmark, we present
our results in a similar style. In panels (a)-(c), we present the LAT in
the medium at different spatial and temporal resolutions. Coloring
according to LAT is consistent across these panels. In panel (d), we
measure the computational speed of Ithildin at different number of used
processes. A linear fit is shown in the double-logarithmic plot which
excludes the data point at $N_\text{proc} = 8$.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="discussion"&gt;&lt;/p&gt;
&lt;h1 id="discussion"&gt;Discussion
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The Ithildin framework is a tool for the simulation of cardiac
electrophysiology. The code offers a number of assets that allow for
simulations targeting a variety of phenomena. For example, there are
many instances available to set the local anisotropy of the myocardium
via the &lt;code&gt;Geometry&lt;/code&gt; class. Please refer to the example presented in
section &lt;a class="link" href="#sec:ithildin:diffusionterm" &gt;4.1&lt;/a&gt; for further details. The
&lt;code&gt;Geometry&lt;/code&gt; class also allows for the simulation and filament tracking in
a domain with an arbitrary number of spatial dimensions (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;, &lt;a class="link" href="#ref-arno2024feynman" &gt;2024a&lt;/a&gt;,
&lt;a class="link" href="#ref-arno2024strings" &gt;2024b&lt;/a&gt;; &lt;a class="link" href="#ref-cloet2023scroll" &gt;Cloet et al.,
2023&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;These include the ability to define inhomogeneities, which can be used
to model domains of any shape and with any kind of obstacles. This is
used in Sim. 1 and Sim. 4. Furthermore, the user can define a variety of
stimulation protocols, of which some are showcased in the example
simulations. We also note the following options: EGM calculation, the
possibility of recording the temporal evolution of variables at sensor
positions, and the Python module for post-processing and analysis.&lt;/p&gt;
&lt;p&gt;It is evident that Ithildin represents but one instance of software
designed for the simulation of cardiac electrophysiology. Another
finite-differences solver is BeatBox (&lt;a class="link" href="#ref-beatbox" &gt;Antonioletti et al.,
2017&lt;/a&gt;), which also relies on domain splitting. A
non-exhaustive list of examples of established simulation software based
on the finite element method (FEM) are Chaste (&lt;a class="link" href="#ref-chaste" &gt;Cooper et al.,
2020&lt;/a&gt;), openCARP (&lt;a class="link" href="#ref-opencarp" &gt;Plank et al., 2021&lt;/a&gt;),
lifex-ep (&lt;a class="link" href="#ref-lifexep" &gt;Africa et al., 2023&lt;/a&gt;), cbcbeat (&lt;a class="link" href="#ref-cbcbeat" &gt;Rognes et al.,
2017&lt;/a&gt;), GEMS (&lt;a class="link" href="#ref-gems" &gt;Arens et al., 2018&lt;/a&gt;), CEPS
(&lt;a class="link" href="#ref-ceps" &gt;CARMEN, 2024&lt;/a&gt;), and simcardems (&lt;a class="link" href="#ref-simcardems" &gt;Finsberg et al.,
2023&lt;/a&gt;). Besides the methods of finite differences,
elements, and volumes, approaches from computational fluid dynamics such
as the lattice Boltzmann method may be used (&lt;a class="link" href="#ref-campos2016lattice" &gt;Campos et al.,
2016&lt;/a&gt;). Several of these packages have more
advanced features than our software. In addition, some have broader
applications than cardiac electrophysiology. More software can be found
in (&lt;a class="link" href="#ref-niederer2011verification" &gt;Niederer et al., 2011&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Limitations of our software are the fact that, in the context of cardiac
electrophysiology, Ithildin only supports the monodomain model as it is
a reaction-diffusion problem conforming with Eq. &lt;a class="link" href="#eq:ithildin:rde" &gt;2&lt;/a&gt;,
and the fact that the domain decomposition happens solely in one
coordinate direction. Further limitations are that Ithildin is
fundamentally voxel-based and hence does not support tetrahedral meshes,
and that only Neumann boundary conditions are implemented. Additionally,
it is only maintained by a small research team. This paper serves to
enhance the visibility of the software and to invite fellow cardiac
modelers to use and contribute to the project. We believe that the
GitLab environment is an effective medium for facilitating interaction
between users, identifying issues and suggesting improvements.&lt;/p&gt;
&lt;p&gt;Our work with Ithildin has demonstrated its ability to study complex
wave patterns in cardiac tissue (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;, &lt;a class="link" href="#ref-arno2024feynman" &gt;2024a&lt;/a&gt;,
&lt;a class="link" href="#ref-arno2024strings" &gt;2024b&lt;/a&gt;; &lt;a class="link" href="#ref-cloet2023scroll" &gt;Cloet et al.,
2023&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al.,
2022&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et al.,
2024&lt;/a&gt;), but it is important to acknowledge the
limitations of the fully explicit numerical scheme used: High resolution
in time and space may be required for numerical stability. Nevertheless,
there are use cases where Ithildin is practical in the context of
clinical applications. For example, it can be used to study rotor waves
and their implications for cardiac function, which have important
implications for diagnosing and treating cardiac diseases. Additionally,
Ithildin can be used to develop new models or simulations that are
tailored to specific experimental conditions or clinical scenarios.&lt;/p&gt;
&lt;div id="conclusion"&gt;
&lt;h1 id="conclusion"&gt;Conclusion
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;In this work, we introduced Ithildin, an open-source library that allows
for numerical simulation and analysis of rotor waves. We demonstrated
the versatility of Ithildin through a series of simulations, including
spiral break-up in the Smooth-Karma model, the S1S2 protocol in the AP96
model, and 2D and 3D spiral waves in the BOCF model in ventricular
geometry.&lt;/p&gt;
&lt;p&gt;Our simulations highlighted several key features of Ithildin, such as
the different implemented geometries and reaction terms,
inhomogeneities, and stimuli, as well as recording data such as the
pseudo-EGM or filament trajectories. These findings contribute to the
growing understanding of rotor waves in cardiac electrophysiology and
have the potential to inform future experimental and theoretical
studies.&lt;/p&gt;
&lt;p&gt;Overall, our work demonstrates the power of Ithildin as a tool for
studying complex wave patterns in cardiac tissue. We hope that this
library will be useful to researchers seeking to better understand the
dynamics of rotor waves and their implications for cardiac function.&lt;/p&gt;
&lt;div id="data-availability"&gt;
&lt;h1 id="data-availability"&gt;Data availability
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The source code of version 3.5.1 of the Ithildin software implemented
for this paper is publicly available at
&lt;a class="link" href="https://gitlab.com/heartkor/ithildin" target="_blank" rel="noopener"
 &gt;https://gitlab.com/heartkor/ithildin&lt;/a&gt; and has been archived on Zenodo
(&lt;a class="link" href="https://doi.org/10.5281/zenodo.12799245" target="_blank" rel="noopener"
 &gt;DOI: 10.5281/zenodo.12799245&lt;/a&gt;).
This archive also contains the data generated by the simulations used
throughout this paper. Documentation of the code is publicly available
at &lt;a class="link" href="https://heartkor.gitlab.io/ithildin/" target="_blank" rel="noopener"
 &gt;https://heartkor.gitlab.io/ithildin/&lt;/a&gt;.&lt;/p&gt;
&lt;div id="appendix"&gt;
&lt;h1 id="appendix"&gt;Appendix
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;This section contains C++ code to run the four simulations that are used
throughout this paper. An overview of their parameters is given in
Table &lt;a class="link" href="#tbl:ithildin:sims" &gt;4&lt;/a&gt;.&lt;/p&gt;
&lt;div id="sim.-1-spiral-break-up-in-the-smooth-karma-model"&gt;
&lt;h2 id="sim1-spiral-break-up-in-the-smooth-karma-model"&gt;Sim. 1: Spiral break-up in the Smooth-Karma model
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This is the source code to the Ithildin simulation used as the main
example throughout this paper.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;quot;ithildin.h&amp;quot;

int main(int argc, char** argv){
 Mpiclass mpi(argc, argv);

 // define model
 Model_SmooKa model1;

 // define model for obstacles
 Model_SmooKa model2;
 model2.hidden_eps *= 1.5;

 // rescale time and space
 const float scale_time = 2.4; // ms/t.u.
 const float scale_space = 0.273; // mm/s.u.
 ModelWrapper_RescaleTimeSpace model1a{
 &amp;amp;model1, scale_time, scale_space, 2,
 };
 ModelWrapper_RescaleTimeSpace model2a{
 &amp;amp;model2, scale_time, scale_space, 2,
 };

 // rescale u to voltage, such that: u is in range [0, 1]
 const float ucrit = 0.5;
 const float ustim = 0.75;
 ModelWrapper_RescaleVars model1b{&amp;amp;model1a, &amp;quot;u&amp;quot;, 0.25, 0.};
 ModelWrapper_RescaleVars model2b{&amp;amp;model2a, &amp;quot;u&amp;quot;, 0.25, 0.};

 // record diffusion term for EGMs
 ModelWrapper_RecordDiffusion model1c{&amp;amp;model1b};
 model1c.record(&amp;quot;u&amp;quot;);
 ModelWrapper_RecordDiffusion model2c{&amp;amp;model2b};
 model2c.record(&amp;quot;u&amp;quot;);

 // record local activation time
 ModelWrapper_RecordActivationTime model1d{&amp;amp;model1c};
 model1d.record(&amp;quot;u&amp;quot;, ucrit);
 ModelWrapper_RecordActivationTime model2d{&amp;amp;model2c};
 model2d.record(&amp;quot;u&amp;quot;, ucrit);

 // combine models
 Model_multi model{{&amp;amp;model1d, &amp;amp;model2d}};

 // geometry parameters
 const size_t Nx = 100;
 const size_t Ny = 70;
 const float dx = 0.2;
 const float dy = dx;
 const float Lx = Nx*dx;
 const float Ly = Ny*dy;

 // set up geometry
 vector&amp;lt;int&amp;gt; size{Nx, Ny, 1};
 vector&amp;lt;float&amp;gt; deltas{dx, dy, 1.};
 Geometry_Iso geom{&amp;amp;mpi, size, deltas, &amp;amp;model};
 geom.add_inhom(
 Shape::Sphere(0.25*Ly, {0.7*Lx, 0.3*Ly}), 2
 );
 geom.add_inhom(
 Shape::Rect({0.2*Lx, 0.7*Ly}, {0.3*Lx, 0.8*Ly}), 2
 );
 geom.add_inhom(Shape([&amp;amp;](vector&amp;lt;float&amp;gt; p) {
 return p[1] &amp;lt; 0.1*Ly*(1. + 0.7*sin(14.*p[0]/Ly));
 }, &amp;quot;waves&amp;quot;), 0);

 // set up simulation and timing
 const int Nframe = 100; // number of frames
 const float framedur = 20.; // time between frames
 const float sampledur = 2.; // sampling time for time traces
 Sim sim{framedur, Nframe, &amp;amp;mpi, &amp;amp;model, &amp;amp;geom, &amp;quot;everything&amp;quot;, 0};

 // filament tracking
 model.define_tip(&amp;quot;u&amp;quot;, ucrit, &amp;quot;v&amp;quot;, 0.95);
 sim.enable_filament_recording(0, sampledur);

 // recording temporal data at a specific location
 sim.add_history_point({0.5*Lx, 0.5*Ly});
 sim.sensorlag = sampledur;

 // record EGMs
 sim.add_egm_electrode({0.5*Lx, 0.5*Ly, 1}, sampledur, &amp;quot;diffusu&amp;quot;);
 const float lambda = 0.3; // proportionality factor between \
 // intra- and extracellular conduction matrix
 const float beta = 1e5; // 1/m; area-to-volume ratio
 const float capacitance = 1e-2; // F/m²; specific cell \
 // membrane capacitance
 const float conductivity = 0.5; // S/m; lumped conductivity
 for(Egm* egm : sim.egm_collection) {
 egm-&amp;gt;construct_kernel(lambda, beta, capacitance, conductivity);
 }

 // set up stimulus protocol
 Source sour(&amp;amp;model, &amp;amp;geom, &amp;amp;mpi, &amp;amp;sim);
 sour.set_val(&amp;quot;u&amp;quot;, ustim);

 // S0: initial stimulus
 sour.stimulate(Shape::Rect({0, 0}, {0.1*Lx, Ly}));

 // wait until S1S2 protocol starts
 const float timeS1 = 600.; // ms
 sour.schedule.emplace(timeS1, [&amp;amp;]() {
 // S1: first stimulus of S1S2
 sour.stimulate(Shape::Rect({0, 0}, {0.1*Lx, Ly}));

 // S2: second stimulus of S1S2
 sour.setupS2(Point::Phys(&amp;amp;geom, &amp;amp;mpi, 0.5*Lx, 0.9*Ly), 0, ucrit,
 [&amp;amp;]() -&amp;gt; void {
 sour.stimulate(Shape::Rect({0, 0}, {Lx, 0.5*Ly}));
 }
 );
 });

 return sim.run(&amp;amp;sour);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div id="sim.-2-2d-spiral-wave-in-the-ap96-model"&gt;
&lt;h2 id="sim2-2d-spiral-wave-in-the-ap96-model"&gt;Sim. 2: 2D spiral wave in the AP96 model
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This example illustrates the S1S2 protocol in an easy-to-interpret
setting.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;quot;ithildin.h&amp;quot;

int main(int argc, char** argv){
 Mpiclass mpi(argc, argv);

 Model_AP model0(0.15, 0.002, 8, 0.2, 0.3, 20);

 // rescale time and space [@aliev1996simple]
 const float scale_time = 12.9; // ms/t.u.
 const float scale_space = 1.; // mm/s.u.
 ModelWrapper_RescaleTimeSpace model{
 &amp;amp;model0, scale_time, scale_space, 2,
 };

 vector&amp;lt;int&amp;gt; size = {120, 120, 1};
 vector&amp;lt;float&amp;gt; dx = {1.0, 1.0, 1.0};
 float Lx = size[0]*dx[0];
 float Ly = size[1]*dx[1];
 Geometry_Iso geom{&amp;amp;mpi, size, dx, &amp;amp;model};

 float framedur = 1.*scale_time;
 int Nframe = 65;
 Sim sim{framedur, Nframe, &amp;amp;mpi, &amp;amp;model, &amp;amp;geom, &amp;quot;s1s2&amp;quot;, 0};
 sim.enable_filament_recording(0, framedur);

 Source sour{&amp;amp;model, &amp;amp;geom, &amp;amp;mpi, &amp;amp;sim};
 sour.set_val(&amp;quot;u&amp;quot;, 0.75);

 // S1
 sour.stimulate(Shape::Rect({0, 0}, {0.1f*Lx, Ly}));

 // S2
 const Point sensor = Point::Phys(&amp;amp;geom, &amp;amp;mpi, 0.6f*Lx, 0.5f*Ly, 0);
 LOG(&amp;quot;sensor&amp;quot;, sensor.get_phys());
 sour.setupS2(sensor, 0, 0.5, [&amp;amp;]() -&amp;gt; void {
 sour.stimulate(Shape::Rect({0, 0}, {Lx, 0.2f*Ly}));
 });

 return sim.run(&amp;amp;sour);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div id="sim.-3-2d-spiral-wave-in-the-bocf-model"&gt;
&lt;h2 id="sim3-2d-spiral-wave-in-the-bocf-model"&gt;Sim. 3: 2D spiral wave in the BOCF model
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This simulation is used to get an initial state for a 3D simulation in
ventricular geometry in the following example.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;quot;ithildin.h&amp;quot;

int main(int argc, char** argv){
 Mpiclass mpi(argc, argv);

 // define model
 Model_BO modelbo{1};
 const float ucrit = 0.5;
 const float ustim = 1.0;

 // record local activation time
 ModelWrapper_RecordActivationTime model{&amp;amp;modelbo};
 model.record(&amp;quot;u&amp;quot;, ucrit);

 // set up geometry
 vector&amp;lt;int&amp;gt; size{450, 450, 1};
 vector&amp;lt;float&amp;gt; dx{0.3, 0.3, 1.};
 const float Lx = size[0]*dx[0];
 const float Ly = size[1]*dx[1];
 Geometry_Iso geom = Geometry_Iso(&amp;amp;mpi, size, dx, &amp;amp;model);

 // set up simulation and timing
 const float framedur = 20.;
 const int Nframe = 34;
 Sim sim{framedur, Nframe, &amp;amp;mpi, &amp;amp;model, &amp;amp;geom, &amp;quot;bocf2d&amp;quot;, 0};

 // set up stimulus protocol
 Source sour(&amp;amp;model, &amp;amp;geom, &amp;amp;mpi, &amp;amp;sim);
 sour.set_val(&amp;quot;u&amp;quot;, ustim);

 // S1: first stimulus of S1S2
 sour.stimulate(Shape::Rect({0, 0}, {0.1*Lx, Ly}));

 // S2: second stimulus of S1S2
 const Point sensor = Point::Phys(&amp;amp;geom, &amp;amp;mpi, 0.75*Lx, 0.5*Ly);
 LOG(&amp;quot;sensor&amp;quot;, sensor.get_phys());
 sour.setupS2(sensor, 0, ucrit, [&amp;amp;]() -&amp;gt; void {
 sour.stimulate(Shape::Rect({0, 0}, {0.75*Lx, 0.75*Ly}));
 });

 return sim.run(&amp;amp;sour);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div id="sim.-4-3d-spiral-wave-in-the-bocf-model"&gt;
&lt;h2 id="sim4-3d-spiral-wave-in-the-bocf-model"&gt;Sim. 4: 3D spiral wave in the BOCF model
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This 3D spiral wave is stimulated by extending a 2D spiral wave and
placing it on ventricular geometry.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;quot;ithildin.h&amp;quot;

int main(int argc, char** argv){
 Mpiclass mpi(argc, argv);

 // choose model
 Model_BO modelbo{1};
 const float ucrit = 0.5;
 const float ustim = 1.0;

 // record local activation time
 ModelWrapper_RecordActivationTime model{&amp;amp;modelbo};
 model.record(&amp;quot;u&amp;quot;, ucrit);

 // set up geometry
 vector&amp;lt;float&amp;gt; Ds {1, 0.25, 0.25};
 vector&amp;lt;int&amp;gt; size {168, 208, 231};
 vector&amp;lt;float&amp;gt; deltas {0.43, 0.43, 0.5};
 Geometry_OrtAniso geom{
 size, deltas, &amp;quot;ventricles&amp;quot;, &amp;amp;model, Ds, &amp;amp;mpi,
 };

 // set up simulation
 float framedur = 20.;
 int Nframe = 30;
 Sim sim{framedur, Nframe, &amp;amp;mpi, &amp;amp;model, &amp;amp;geom, &amp;quot;bocf3d&amp;quot;, 0};

 // filament tracking
 sim.enable_filament_recording(0, framedur);

 // set up stimuli
 Source sour{&amp;amp;model, &amp;amp;geom, &amp;amp;mpi, &amp;amp;sim};

 // transform 2D simulation onto 3D ventricles, PD on RV
 NDArray&amp;lt;float&amp;gt; transform; transform.read(&amp;quot;bocf2d3d.transform.npy&amp;quot;);
 NDArray&amp;lt;float&amp;gt; vars = sour.read_from_stem(&amp;quot;bocf2d_0&amp;quot;, 34);
 const vector&amp;lt;size_t&amp;gt; shape{
 vars.get_shape(0), size[0], size[1], size[2],
 };
 vars = vars.interpolate(&amp;amp;mpi, shape,
 [&amp;amp;transform](std::vector&amp;lt;float&amp;gt; x){
 if(x.size() != 4) { ERROR(&amp;quot;invalid shape&amp;quot;); }
 std::vector&amp;lt;float&amp;gt; z{1., x[1], x[2], x[3]};
 std::vector&amp;lt;float&amp;gt; y(4, 0);
 for(size_t i=0; i&amp;lt;4; i++) {
 for(size_t j=0; j&amp;lt;4; j++) {
 y[i] += transform(i,j)*z[j];
 }
 }
 return std::vector&amp;lt;float&amp;gt;{x[0], y[1], y[2], y[3]};
 }
 );
 sour.set_frame(vars);

 return sim.run(&amp;amp;sour);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div id="sim.-5-cardiac-electrophysiology-benchmark"&gt;
&lt;h2 id="sim5-cardiac-electrophysiology-benchmark"&gt;Sim. 5: Cardiac electrophysiology benchmark
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This is the benchmark problem as proposed by Niederer et al.
(&lt;a class="link" href="#ref-niederer2011verification" &gt;2011&lt;/a&gt;) using the cell model by ten
Tusscher &amp;amp; Panfilov (&lt;a class="link" href="#ref-ten2006alternans" &gt;2006&lt;/a&gt;).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;quot;ithildin.h&amp;quot;

int main(int argc, char** argv){
 std::vector&amp;lt;float&amp;gt; arg = strings_to_floats(argc, argv);
 Mpiclass mpi(argc, argv);

 // arg 1: serial number
 const int serialnr = (arg.size() &amp;gt; 1) ? round(arg.at(1)) : 0;
 MASTER_INFO(&amp;quot;serialnr&amp;quot;, serialnr);

 // arg 2: discretization {0.1, 0.2, 0.5}
 const float dx = (arg.size() &amp;gt; 2) ? arg.at(2) : 0.2; // mm

 // arg 3: PDE time steps {0.005, 0.01, 0.05}
 const float dt = (arg.size() &amp;gt; 3) ? arg.at(3) : 0.05; // ms

 // define model
 Model_TP06 model_tp06;
 ModelWrapper_RecordActivationTime model{&amp;amp;model_tp06};
 model.record(&amp;quot;V&amp;quot;, 0);

 // constants
 const float C_m = 0.01; // µF/mm² (membrane capacitance)
 const float chi = 140; // 1/mm (surface-to-volume ratio)

 // diffusivities intra/extra longitudinal/transversal
 const float scale = 1 / (chi * C_m); // mm³/µF
 const float Dil = scale*0.17; // mm²/ms
 const float Dit = scale*0.019; // mm²/ms
 const float Del = scale*0.62; // mm²/ms
 const float Det = scale*0.24; // mm²/ms

 // diffusivities longitudinal/transversal
 const float Dl = Dil*Del / (Dil+Del); // mm²/ms
 const float Dt = Dit*Det / (Dit+Det); // mm²/ms

 // diffusivity tensor only scales, Pmat stores magnitude
 vector&amp;lt;float&amp;gt; D{1., Dt/Dl, Dt/Dl}; // 1
 model.set_Pmat(Dl); // mm²/ms

 // domain size
 const float Lx = 20; // mm
 const float Ly = 7; // mm
 const float Lz = 3; // mm

 // set up geometry
 vector&amp;lt;float&amp;gt; deltas{dx, dx, dx};
 vector&amp;lt;int&amp;gt; size{
 int(Lx/deltas[0])+1, int(Ly/deltas[1])+1, int(Lz/deltas[2])+1,
 };
 vector&amp;lt;float&amp;gt; tissue_angles{0., 0.};
 vector&amp;lt;float&amp;gt; diffpars{1, 1, 0};
 Geometry_OrtAniso geom{
 size, deltas, &amp;amp;model, tissue_angles, diffpars, D, &amp;amp;mpi,
 };

 // limit output
 for(size_t ivar=0; ivar&amp;lt;model.get_Nvar(); ivar++)
 { geom.set_bwritevar(ivar, 0); }
 geom.set_bwritevar(model.get_ivar(&amp;quot;V&amp;quot;), 1);
 geom.set_bwritevar(model.get_ivar(&amp;quot;latV&amp;quot;), 1);

 // set up simulation and timing
 const int Nframe = 15; // number of frames
 const float framedur = 10.; // time between frames in ms
 Sim sim{
 dt, framedur, Nframe, 0, &amp;amp;mpi, &amp;amp;model, &amp;amp;geom,
 &amp;quot;niederer2011benchmark&amp;quot;, serialnr, false,
 };

 // set up stimulus
 Source sour(&amp;amp;model, &amp;amp;geom, &amp;amp;mpi, &amp;amp;sim);
 const float I_stim = 50; // mA/cm³ (stimulus current)
 const float i_stim = I_stim * scale; // A/F = V/s = mV/ms
 sour.set_val(&amp;quot;V&amp;quot;, i_stim); // mV/ms
 sour.stimulate({
 Shape::Rect({0, 0, 0}, {1.5, 1.5, 1.5}),
 1.0, // amplitude factor
 2.0, // ms; duration
 true, // flag: additive stimulus
 });

 return sim.run(&amp;amp;sour);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div &gt;
&lt;h1 id="addenda"&gt;Addenda
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Acknowledgments:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are grateful to Daniël A. Pijnappels, Antoine A.F. de Vries and our
other collaborators at the LUMC, as well as Louise Arno, Lore Leenknegt,
and Nathan Dermul at KU Leuven in Kortrijk for useful feedback and
discussions.&lt;/p&gt;
&lt;p&gt;While no generative AI has been used to write the Ithildin source code,
generative AI has been used by the authors to aid in the writing of the
text, specifically the Large Language Model (LLM) implementations
&lt;a class="link" href="https://copilot.github.com" target="_blank" rel="noopener"
 &gt;GitHub Copilot&lt;/a&gt;,
&lt;a class="link" href="https://chat.openai.com/" target="_blank" rel="noopener"
 &gt;ChatGPT&lt;/a&gt; using GPT-3.5 and GPT-4o, as well as
&lt;a class="link" href="https://ollama.com/library/mistral" target="_blank" rel="noopener"
 &gt;Mistral 0.2&lt;/a&gt; via the
&lt;a class="link" href="https://ollama.com/" target="_blank" rel="noopener"
 &gt;Ollama&lt;/a&gt; software. The authors confirm that they
have followed the current &lt;a class="link" href="https://journals.plos.org/plosone/s/ethical-publishing-practice" target="_blank" rel="noopener"
 &gt;ethical publishing practices of PLOS
One&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Funding:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DK is supported by KU Leuven grant GPUL/20/012. MC is supported by KU
Leuven grant STG/19/007 and FWO-Flanders fellowship, grant 11PMS24N. HD
is supported by KU Leuven grant STG/19/007. OB is supported by Agence
Nationale de la Recherche grant ANR-IHUA-04. The funders had no role in
study design, data collection and analysis, decision to publish, or
preparation of the manuscript.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Competing interests:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The authors have declared that no competing interests exist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Copyright:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;© 2024 Kabus et al. This is an open access article distributed under the
terms of the &lt;a class="link" href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noopener"
 &gt;Creative Commons Attribution
License&lt;/a&gt;, which permits
unrestricted use, distribution, and reproduction in any medium, provided
the original author and source are credited.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Author contributions:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DK:&lt;/strong&gt;
Conceptualization, Methodology, Software, Validation, Formal analysis, Investigation, Data Curation, Writing &amp;ndash; original draft, Writing &amp;ndash; review &amp;amp; editing, Visualization, Project administration. &lt;strong&gt;MC:&lt;/strong&gt;
Methodology, Software, Validation, Formal analysis, Investigation, Data Curation, Writing &amp;ndash; original draft, Writing &amp;ndash; review &amp;amp; editing, Visualization. &lt;strong&gt;CZ:&lt;/strong&gt;
Software. &lt;strong&gt;OB:&lt;/strong&gt; Software. &lt;strong&gt;HD:&lt;/strong&gt;
Conceptualization, Software, Resources, Writing &amp;ndash; review &amp;amp; editing, Supervision, Project administration, Funding acquisition.
&lt;div &gt;&lt;/p&gt;
&lt;h1 id="references"&gt;References
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="refs" class="references csl-bib-body hanging-indent" entry-spacing="0" line-spacing="2"&gt;
&lt;div id="ref-lifexep" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Africa, P. C., Piersanti, R., Regazzoni, F., Bucelli, M., Salvador, M.,
Fedele, M., Pagani, S., Dede&amp;rsquo;, L., &amp;amp; Quarteroni, A. (2023).
&lt;span &gt;Lifex-Ep&lt;/span&gt;: A robust
and efficient software for cardiac electrophysiology simulations. &lt;em&gt;BMC
Bioinformatics&lt;/em&gt;, &lt;em&gt;24&lt;/em&gt;(1), 389.
&lt;a class="link" href="https://doi.org/10.1186/s12859-023-05513-8" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1186/s12859-023-05513-8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-paraview" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Ahrens, J., Geveci, B., Law, C., Hansen, C., &amp;amp; Johnson, C. (2005).
ParaView: An end-user tool for large-data visualization. &lt;em&gt;The
Visualization Handbook&lt;/em&gt;, &lt;em&gt;717&lt;/em&gt;, 50038&amp;ndash;50031.
&lt;a class="link" href="https://doi.org/10.1016/b978-012387582-2/50038-1" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/b978-012387582-2/50038-1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-aliev1996simple" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Aliev, R. R., &amp;amp; Panfilov, A. V. (1996). A simple two-variable model of
cardiac excitation. &lt;em&gt;Chaos, Solitons &amp;amp; Fractals&lt;/em&gt;, &lt;em&gt;7&lt;/em&gt;(3), 293&amp;ndash;301.
&lt;a class="link" href="https://doi.org/10.1016/0960-0779%2895%2900089-5" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0960-0779(95)00089-5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-beatbox" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Antonioletti, M., Biktashev, V. N., Jackson, A., Kharche, S. R., Stary,
T., &amp;amp; Biktasheva, I. V. (2017).
&lt;span &gt;BeatBox&lt;/span&gt;&amp;mdash;&lt;span &gt;HPC&lt;/span&gt;
simulation environment for biophysically and anatomically realistic
cardiac electrophysiology. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(5), e0172292.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0172292" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0172292&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gems" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arens, S., Dierckx, H., &amp;amp; Panfilov, A. V. (2018).
&lt;span &gt;GEMS&lt;/span&gt;: A fully
integrated
&lt;span &gt;PETSc&lt;/span&gt;-based solver
for coupled cardiac electromechanics and bidomain simulations.
&lt;em&gt;Frontiers in Physiology&lt;/em&gt;, &lt;em&gt;9&lt;/em&gt;, 1431.
&lt;a class="link" href="https://doi.org/10.3389/fphys.2018.01431" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fphys.2018.01431&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arno2024feynman" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arno, L., Kabus, D., &amp;amp; Dierckx, H. (2024a). Analysis of complex
excitation patterns using
&lt;span class="nocase"&gt;Feynman-like&lt;/span&gt;
diagrams. &lt;em&gt;Scientific Reports&lt;/em&gt;, &lt;em&gt;14&lt;/em&gt;(1), 28962.
&lt;a class="link" href="https://doi.org/10.1038/s41598-024-73544-z" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41598-024-73544-z&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arno2024strings" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arno, L., Kabus, D., &amp;amp; Dierckx, H. (2024b). Strings, branes and
twistons: Topological analysis of phase defects in excitable media such
as the heart. In &lt;em&gt;arXiv preprint arXiv:2401.02571&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.48550/arXiv.2401.02571" target="_blank" rel="noopener"
 &gt;https://doi.org/10.48550/arXiv.2401.02571&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arno2021phase" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arno, L., Quan, J., Nguyen, N. T., Vanmarcke, M., Tolkacheva, E. G., &amp;amp;
Dierckx, H. (2021). A phase defect framework for the analysis of cardiac
arrhythmia patterns. &lt;em&gt;Frontiers in Physiology&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.3389/fphys.2021.690453" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fphys.2021.690453&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-barkley1991model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Barkley, D. (1991). A model for fast computer simulation of waves in
excitable media. &lt;em&gt;Physica D: Nonlinear Phenomena&lt;/em&gt;, &lt;em&gt;49&lt;/em&gt;(1-2), 61&amp;ndash;70.
&lt;a class="link" href="https://doi.org/10.1016/0167-2789%2891%2990194-e" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0167-2789(91)90194-e&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bishop2011egm" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bishop, M. J., &amp;amp; Plank, G. (2011). Bidomain
&lt;span &gt;ECG&lt;/span&gt; simulations
using an augmented monodomain model for the cardiac source. &lt;em&gt;IEEE
Transactions on Bio-Medical Engineering&lt;/em&gt;, &lt;em&gt;58&lt;/em&gt;(8).
&lt;a class="link" href="https://doi.org/10.1109/TBME.2011.2148718" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/TBME.2011.2148718&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bueno2008model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bueno-Orovio, A., Cherry, E. M., &amp;amp; Fenton, F. H. (2008). Minimal model
for human ventricular action potentials in tissue. &lt;em&gt;Journal of
Theoretical Biology&lt;/em&gt;, &lt;em&gt;253&lt;/em&gt;(3), 544&amp;ndash;560.
&lt;a class="link" href="https://doi.org/10.1016/j.jtbi.2008.03.029" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jtbi.2008.03.029&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-byrne2015exact" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Byrne, G., Marcotte, C. D., &amp;amp; Grigoriev, R. O. (2015). Exact coherent
structures and chaotic dynamics in a model of cardiac tissue. &lt;em&gt;Chaos: An
Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;25&lt;/em&gt;(3), 033108.
&lt;a class="link" href="https://doi.org/10.1063/1.4915143" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.4915143&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-campos2016lattice" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Campos, J. O., Oliveira, R. S., dos Santos, R. W., &amp;amp; Rocha, B. M.
(2016). Lattice boltzmann method for parallel simulations of cardiac
electrophysiology using GPUs. &lt;em&gt;Journal of Computational and Applied
Mathematics&lt;/em&gt;, &lt;em&gt;295&lt;/em&gt;, 70&amp;ndash;82. &lt;a class="link" href="https://doi.org/10.1016/j.cam.2015.02.008" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.cam.2015.02.008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-ceps" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;CARMEN. (2024). &lt;em&gt;Cardiac &lt;span &gt;ElectroPhysiology
Simulator&lt;/span&gt;
(&lt;span &gt;CEPS&lt;/span&gt;)&lt;/em&gt;. IHU Liryc,
Inria. &lt;a class="link" href="https://carmen.gitlabpages.inria.fr/ceps/" target="_blank" rel="noopener"
 &gt;https://carmen.gitlabpages.inria.fr/ceps/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clayton2011review" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clayton, R., Bernus, O., Cherry, E. M., Dierckx, H., Fenton, F. H.,
Mirabella, L., Panfilov, A. V., Sachse, F. B., Seemann, G., &amp;amp; Zhang, H.
(2011). Models of cardiac tissue electrophysiology: Progress, challenges
and open questions. &lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;,
&lt;em&gt;104&lt;/em&gt;(1-3), 22&amp;ndash;48. &lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2010.05.008" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2010.05.008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clayton2006phase" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clayton, R., Zhuchkova, E., &amp;amp; Panfilov, A. (2006). Phase singularities
and filaments:
&lt;span &gt;Simplifying&lt;/span&gt;
complexity in computational models of ventricular fibrillation.
&lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;, &lt;em&gt;90&lt;/em&gt;(1-3), 378&amp;ndash;398.
&lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2005.06.011" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2005.06.011&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cloet2023scroll" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cloet, M., Arno, L., Kabus, D., Van der Veken, J., Panfilov, A. V., &amp;amp;
Dierckx, H. (2023). Scroll waves and filaments in excitable media of
higher spatial dimension. &lt;em&gt;Physical Review Letters&lt;/em&gt;, &lt;em&gt;131&lt;/em&gt;(20), 208401.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevLett.131.208401" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevLett.131.208401&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-chaste" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cooper, F. R., Baker, R. E., Bernabeu, M. O., Bordas, R., Bowler, L.,
Bueno-Orovio, A., Byrne, H. M., Carapella, V., Cardone-Noott, L.,
Cooper, J., Dutta, S., Evans, B. D., Fletcher, A. G., Grogan, J. A.,
Guo, W., Harvey, D. G., Hendrix, M., Kay, D., Kursawe, J., Maini, P. K.,
McMillan, B., Mirams, G. R., Osborne, J. M., Pathmanathan, P.,
Pitt-Francis, J. M., Robinson, M., Rodriguez, B., Spiteri, R. J., &amp;amp;
Gavaghan, D. J. (2020). Chaste:
&lt;span &gt;Cancer&lt;/span&gt;,
&lt;span &gt;Heart&lt;/span&gt; and
&lt;span &gt;Soft Tissue
Environment&lt;/span&gt;. &lt;em&gt;Journal of Open Source
Software&lt;/em&gt;, &lt;em&gt;5&lt;/em&gt;(47), 1848. &lt;a class="link" href="https://doi.org/10.21105/joss.01848" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.01848&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-courant1928cfl" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Courant, R., Friedrichs, K., &amp;amp; Lewy, H. (1928).
&lt;span &gt;&lt;span &gt;Ü&lt;/span&gt;ber
die partiellen Differenzengleichungen der mathematischen
Physik&lt;/span&gt;. &lt;em&gt;Mathematische Annalen&lt;/em&gt;, &lt;em&gt;100&lt;/em&gt;(1),
32&amp;ndash;74. &lt;a class="link" href="https://doi.org/10.1007/BF01448839" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/BF01448839&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-dierckx2015theory" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Dierckx, H., Arens, S., Li, B.-W., Weise, L. D., &amp;amp; Panfilov, A. V.
(2015). A theory for spiral wave drift in reaction-diffusion-mechanics
systems. &lt;em&gt;New Journal of Physics&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;(4), 043055.
&lt;a class="link" href="https://doi.org/10.1088/1367-2630/17/4/043055" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1088/1367-2630/17/4/043055&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-dierckx2013paraboloid" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Dierckx, H., Brisard, E., Verschelde, H., &amp;amp; Panfilov, A. V. (2013).
Drift laws for spiral waves on curved anisotropic surfaces. &lt;em&gt;Physical
Review E&lt;/em&gt;, &lt;em&gt;88&lt;/em&gt;(1), 012908. &lt;a class="link" href="https://doi.org/10.1103/PhysRevE.88.012908" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevE.88.012908&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-yaml" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;döt Net, I., Müller, T., Antoniou, P., Aro, E., Smith, T., Evans, C. C.,
&amp;amp; Ben-Kiki, O. (2023). &lt;em&gt;YAML ain&amp;rsquo;t markup language, revision 1.2.2&lt;/em&gt;.
YAML Language Development Team. &lt;a class="link" href="https://yaml.org/spec/1.2.2/" target="_blank" rel="noopener"
 &gt;https://yaml.org/spec/1.2.2/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-euler1794institutiones" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Euler, L. (1794). &lt;em&gt;Institutiones calculi integralis&lt;/em&gt; (Vol. 4). Academia
Imperialis Scientiarum.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fenton1998vortex" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Fenton, F. H., &amp;amp; Karma, A. (1998). Vortex dynamics in three-dimensional
continuous myocardium with fiber rotation: Filament instability and
fibrillation. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;(1), 20&amp;ndash;47. &lt;a class="link" href="https://doi.org/10.1063/1.166311" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166311&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-simcardems" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Finsberg, H. N. T., van Herck, I. G. M., Daversin-Catty, C., Arevalo,
H., &amp;amp; Wall, S. (2023).
&lt;span class="nocase"&gt;simcardems&lt;/span&gt;:
A &lt;span &gt;FEniCS&lt;/span&gt;-based
cardiac electro-mechanics solver. &lt;em&gt;Journal of Open Source Software&lt;/em&gt;,
&lt;em&gt;8&lt;/em&gt;(81), 4753. &lt;a class="link" href="https://doi.org/10.21105/joss.04753" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.04753&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fitzhugh1961impulses" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;FitzHugh, R. (1961). Impulses and physiological states in theoretical
models of nerve membrane. &lt;em&gt;Biophysical Journal&lt;/em&gt;, &lt;em&gt;1&lt;/em&gt;(6), 445&amp;ndash;466.
&lt;a class="link" href="https://doi.org/10.1016/s0006-3495%2861%2986902-6" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/s0006-3495(61)86902-6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gillette2021framework" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gillette, K., Gsell, M. A. F., Prassl, A. J., Karabelas, E., Reiter, U.,
Reiter, G., Grandits, T., Payer, C., Štern, D., Urschler, M., Bayer, J.
D., Augustin, C. M., Neic, A., Pock, T., Vigmond, E. J., &amp;amp; Plank, G.
(2021). A framework for the generation of digital twins of cardiac
electrophysiology from clinical 12-leads
&lt;span &gt;ECGs&lt;/span&gt;. &lt;em&gt;Medical Image
Analysis&lt;/em&gt;, &lt;em&gt;71&lt;/em&gt;, 102080. &lt;a class="link" href="https://doi.org/10.1016/j.media.2021.102080" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.media.2021.102080&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-goryachev1996spiral" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Goryachev, A., &amp;amp; Kapral, R. (1996). Spiral waves in chaotic systems.
&lt;em&gt;Physical Review Letters&lt;/em&gt;, &lt;em&gt;76&lt;/em&gt;(10), 1619&amp;ndash;1622.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevLett.76.1619" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevLett.76.1619&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-openmpi" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Graham, R. L., Shipman, G. M., Barrett, B. W., Castain, R. H., Bosilca,
G., &amp;amp; Lumsdaine, A. (2006). Open MPI: A high-performance, heterogeneous
MPI. &lt;em&gt;2006 IEEE Int. Conf. On Cluster Computing&lt;/em&gt;, 1&amp;ndash;9.
&lt;a class="link" href="https://doi.org/10.1109/CLUSTR.2006.311904" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/CLUSTR.2006.311904&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-numpy" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Harris, C. R., Millman, K. J., Walt, S. J. van der, Gommers, R.,
Virtanen, P., Cournapeau, D., Wieser, E., Taylor, J., Berg, S., Smith,
N. J., Kern, R., Picus, M., Hoyer, S., Kerkwijk, M. H. van, Brett, M.,
Haldane, A., Río, J. F. del, Wiebe, M., Peterson, P., Gérard-Marchant,
P., Sheppard, K., Reddy, T., Weckesser, W., Abbasi, H., Gohlke, C., &amp;amp;
Oliphant, T. E. (2020). Array programming with
&lt;span &gt;NumPy&lt;/span&gt;. &lt;em&gt;Nature&lt;/em&gt;,
&lt;em&gt;585&lt;/em&gt;(7825), 357&amp;ndash;362. &lt;a class="link" href="https://doi.org/10.1038/s41586-020-2649-2" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41586-020-2649-2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-hren1996realistic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hren, R. (1996). &lt;em&gt;A realistic model of the human ventricular myocardium:
Application to the study of ectopic activation&lt;/em&gt; [PhD thesis, Dalhousie
University]. &lt;a class="link" href="https://dalspace.library.dal.ca/handle/10222/55139" target="_blank" rel="noopener"
 &gt;https://dalspace.library.dal.ca/handle/10222/55139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-matplotlib" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Hunter, J. D. (2007). Matplotlib: A 2D graphics environment. &lt;em&gt;Computing
in Science &amp;amp; Engineering&lt;/em&gt;, &lt;em&gt;9&lt;/em&gt;(3), 90&amp;ndash;95.
&lt;a class="link" href="https://doi.org/10.1109/MCSE.2007.55" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/MCSE.2007.55&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cpp11" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ISO. (2011). &lt;em&gt;ISO/IEC 14882:2011: Information technology &amp;mdash; programming
languages &amp;mdash; &lt;span &gt;C++&lt;/span&gt;&lt;/em&gt;
(Third, p. 1338). International Organization for Standardization.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cpp14" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ISO. (2014). &lt;em&gt;ISO/IEC 14882:2014: Information technology &amp;mdash; programming
languages &amp;mdash; &lt;span &gt;C++&lt;/span&gt;&lt;/em&gt;
(Fourth, p. 1358). International Organization for Standardization.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cpp17" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ISO. (2017). &lt;em&gt;ISO/IEC 14882:2017: Programming languages &amp;mdash;
&lt;span &gt;C++&lt;/span&gt;&lt;/em&gt; (Fifth, p.
1605). International Organization for Standardization.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cpp20" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ISO. (2020). &lt;em&gt;ISO/IEC 14882:2020: Programming languages &amp;mdash;
&lt;span &gt;C++&lt;/span&gt;&lt;/em&gt; (Sixth, p.
1853). International Organization for Standardization.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cpp23" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ISO. (2023). &lt;em&gt;ISO/IEC 14882:2023: Programming languages &amp;mdash;
&lt;span &gt;C++&lt;/span&gt;&lt;/em&gt; (Seventh, p.
2101). International Organization for Standardization.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2022numerical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Arno, L., Leenknegt, L., Panfilov, A. V., &amp;amp; Dierckx, H.
(2022). Numerical methods for the detection of phase defect structures
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;(7), 1&amp;ndash;31.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0271351" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0271351&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2024ithildin" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Cloet, M., Zemlin, C., Bernus, O., &amp;amp; Dierckx, H. (2024). The
&lt;span &gt;Ithildin&lt;/span&gt; library for
efficient numerical solution of anisotropic reaction-diffusion problems
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;19&lt;/em&gt;(9), 1&amp;ndash;26.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0303674" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0303674&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2024fast" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., De Coster, T., de Vries, A. A. F., Pijnappels, D. A., &amp;amp;
Dierckx, H. (2024). Fast creation of data-driven low-order predictive
cardiac tissue excitation models from recorded activation patterns.
&lt;em&gt;Computers in Biology and Medicine&lt;/em&gt;, &lt;em&gt;169&lt;/em&gt;, 107949.
&lt;a class="link" href="https://doi.org/10.1016/j.compbiomed.2024.107949" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.compbiomed.2024.107949&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-karma1993spiral" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Karma, A. (1993). Spiral breakup in model equations of action potential
propagation in cardiac tissue. &lt;em&gt;Physical Review Letters&lt;/em&gt;, &lt;em&gt;71&lt;/em&gt;(7), 1103.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevLett.71.1103" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevLett.71.1103&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-karma1994electrical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Karma, A. (1994). Electrical alternans and spiral wave breakup in
cardiac tissue. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;4&lt;/em&gt;(3), 461&amp;ndash;472. &lt;a class="link" href="https://doi.org/10.1063/1.166024" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166024&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kazantsev2003spiking" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kazantsev, V. B., Nekorkin, V. I., Binczak, S., &amp;amp; Bilbault, J. M.
(2003). Spiking patterns emerging from wave instabilities in a
one-dimensional neural lattice. &lt;em&gt;Physical Review E&lt;/em&gt;, &lt;em&gt;68&lt;/em&gt;(1), 017201.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevE.68.017201" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevE.68.017201&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-koopsen2024virtual" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Koopsen, T., Gerrits, W., van Osta, N., van Loon, T., Wouters, P.,
Prinzen, F. W., Vernooy, K., Delhaas, T., Teske, A. J., Meine, M.,
Cramer, M. J., &amp;amp; Lumens, J. (2024). Virtual pacing of a patient&amp;rsquo;s
digital twin to predict left ventricular reverse remodelling after
cardiac resynchronization therapy. &lt;em&gt;Europace&lt;/em&gt;, &lt;em&gt;26&lt;/em&gt;(1), euae009.
&lt;a class="link" href="https://doi.org/10.1093/europace/euae009" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1093/europace/euae009&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-li1994convergence" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Li, N., Steiner, J., &amp;amp; Tang, S. (1994). Convergence and stability
analysis of an explicit finite difference method for 2-dimensional
reaction-diffusion equations. &lt;em&gt;The Journal of the Australian
Mathematical Society. Series B. Applied Mathematics&lt;/em&gt;, &lt;em&gt;36&lt;/em&gt;(2), 234&amp;ndash;241.
&lt;a class="link" href="https://doi.org/10.1017/S0334270000010377" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1017/S0334270000010377&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-luo1994dynamic1" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Luo, C., &amp;amp; Rudy, Y. (1994). A dynamic model of the cardiac ventricular
action potential. I. Simulations of ionic currents and concentration
changes. &lt;em&gt;Circulation Research&lt;/em&gt;, &lt;em&gt;74&lt;/em&gt;(6), 1071&amp;ndash;1096.
&lt;a class="link" href="https://doi.org/10.1161/01.RES.74.6.1071" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.RES.74.6.1071&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-marcotte2017dynamical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Marcotte, C. D., &amp;amp; Grigoriev, R. O. (2017). Dynamical mechanism of
atrial fibrillation: A topological approach. &lt;em&gt;Chaos: An
Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;27&lt;/em&gt;(9).
&lt;a class="link" href="https://doi.org/10.1063/1.5003259" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.5003259&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-xdmf" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Mark, E. et al. (2007). Enhancements to the extensible data model and
format (XDMF). &lt;em&gt;2007 DoD High Performance Computing Modernization
Program Users Group Conference&lt;/em&gt;, 322&amp;ndash;327.
&lt;a class="link" href="https://doi.org/10.1109/HPCMP-UGC.2007.30" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/HPCMP-UGC.2007.30&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-mermin1979topological" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Mermin, N. D. (1979). The topological theory of defects in ordered
media. &lt;em&gt;Reviews of Modern Physics&lt;/em&gt;, &lt;em&gt;51&lt;/em&gt;(3), 591&amp;ndash;648.
&lt;a class="link" href="https://doi.org/10.1103/RevModPhys.51.591" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/RevModPhys.51.591&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-mitchellschaeffer2003model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Mitchell, C. (2003). A two-current model for the dynamics of cardiac
membrane. &lt;em&gt;Bulletin of Mathematical Biology&lt;/em&gt;, &lt;em&gt;65&lt;/em&gt;(5), 767&amp;ndash;793.
&lt;a class="link" href="https://doi.org/10.1016/S0092-8240%2803%2900041-7" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/S0092-8240(03)00041-7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-nagumo1962active" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Nagumo, J., Arimoto, S., &amp;amp; Yoshizawa, S. (1962). An active pulse
transmission line simulating nerve axon. &lt;em&gt;Proceedings of the
&lt;span &gt;IRE&lt;/span&gt;&lt;/em&gt;, &lt;em&gt;50&lt;/em&gt;(10),
2061&amp;ndash;2070. &lt;a class="link" href="https://doi.org/10.1109/jrproc.1962.288235" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/jrproc.1962.288235&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-niederer2011verification" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Niederer, S. A., Kerfoot, E., Benson, A. P., Bernabeu, M. O., Bernus,
O., Bradley, C., Cherry, E. M., Clayton, R., Fenton, F. H., Garny, A.,
Heidenreich, E., Land, S., Maleckar, M., Pathmanathan, P., Plank, G.,
Rodríguez, J. F., Roy, I., Sachse, F. B., Seemann, G., Skavhaug, O., &amp;amp;
Smith, N. P. (2011). Verification of cardiac tissue electrophysiology
simulators using an
&lt;span class="nocase"&gt;N-version&lt;/span&gt;
benchmark. &lt;em&gt;Philosophical Transactions of the Royal Society A:
Mathematical, Physical and Engineering Sciences&lt;/em&gt;, &lt;em&gt;369&lt;/em&gt;(1954),
4331&amp;ndash;4351. &lt;a class="link" href="https://doi.org/10.1098/rsta.2011.0139" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1098/rsta.2011.0139&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-niederer2019computational" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Niederer, S. A., Lumens, J., &amp;amp; Trayanova, N. A. (2019). Computational
models in cardiology. &lt;em&gt;Nature Reviews Cardiology&lt;/em&gt;, &lt;em&gt;16&lt;/em&gt;(2), 100&amp;ndash;111.
&lt;a class="link" href="https://doi.org/10.1038/s41569-018-0104-y" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41569-018-0104-y&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-opencarp" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Plank, G., Loewe, A., Neic, A., Augustin, C., Huang, Y.-L., Gsell, M. A.
F., Karabelas, E., Nothstein, M., Prassl, A. J., Sánchez, J., Seemann,
G., &amp;amp; Vigmond, E. J. (2021). The
&lt;span class="nocase"&gt;openCARP&lt;/span&gt;
simulation environment for cardiac electrophysiology. &lt;em&gt;Computer Methods
and Programs in Biomedicine&lt;/em&gt;, &lt;em&gt;208&lt;/em&gt;, 106223.
&lt;a class="link" href="https://doi.org/10.1016/j.cmpb.2021.106223" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.cmpb.2021.106223&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-pravdin2015drift" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Pravdin, S., Dierckx, H., Markhasin, V. S., &amp;amp; Panfilov, A. V. (2015).
Drift of scroll wave filaments in an anisotropic model of the left
ventricle of the human heart. &lt;em&gt;BioMed Research International&lt;/em&gt;, &lt;em&gt;2015&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.1155/2015/389830" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1155/2015/389830&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-press2007numerical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Press, W. H. (2007). &lt;em&gt;Numerical recipes 3rd edition: The art of
scientific computing&lt;/em&gt;. Cambridge university press.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cbcbeat" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Rognes, M. E., Farrell, P. E., Funke, S. W., Hake, J. E., &amp;amp; Maleckar, M.
M. C. (2017). Cbcbeat: An adjoint-enabled framework for computational
cardiac electrophysiology. &lt;em&gt;The Journal of Open Source Software&lt;/em&gt;,
&lt;em&gt;2&lt;/em&gt;(13), 224. &lt;a class="link" href="https://doi.org/10.21105/joss.00224" target="_blank" rel="noopener"
 &gt;https://doi.org/10.21105/joss.00224&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-streeter1969fiber" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Streeter, D. D., Spotnitz, H. M., Patel, D. P., Ross, J., &amp;amp; Sonnenblick,
E. H. (1969). Fiber orientation in the canine left ventricle during
diastole and systole. &lt;em&gt;Circulation Research&lt;/em&gt;, &lt;em&gt;24&lt;/em&gt;(3), 339&amp;ndash;347.
&lt;a class="link" href="https://doi.org/10.1161/01.RES.24.3.339" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.RES.24.3.339&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-tentusscher2007organization" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ten Tusscher, K. H. W. J., Hren, R., &amp;amp; Panfilov, A. V. (2007).
Organization of ventricular fibrillation in the human heart.
&lt;em&gt;Circulation Research&lt;/em&gt;, &lt;em&gt;100&lt;/em&gt;(12).
&lt;a class="link" href="https://doi.org/10.1161/CIRCRESAHA.107.150730" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/CIRCRESAHA.107.150730&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-ten2006alternans" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ten Tusscher, K. H. W. J., &amp;amp; Panfilov, A. V. (2006). Alternans and
spiral breakup in a human ventricular tissue model. &lt;em&gt;American Journal of
Physiology-Heart and Circulatory Physiology&lt;/em&gt;, &lt;em&gt;291&lt;/em&gt;(3), H1088&amp;ndash;H1100.
&lt;a class="link" href="https://doi.org/10.1152/ajpheart.00109.2006" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.00109.2006&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-tolkien1954fellowship" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Tolkien, J. R. R. (1954). &lt;em&gt;The
&lt;span &gt;Lord&lt;/span&gt; of the
&lt;span &gt;Rings&lt;/span&gt;: The
&lt;span &gt;Fellowship&lt;/span&gt; of the
&lt;span &gt;Ring&lt;/span&gt;&lt;/em&gt;. Allen &amp;amp;
Unwin.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-tomii2021spatial" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Tomii, N., Yamazaki, M., Ashihara, T., Nakazawa, K., Shibata, N., Honjo,
H., &amp;amp; Sakuma, I. (2021). Spatial phase discontinuity at the center of
moving cardiac spiral waves. &lt;em&gt;Computers in Biology and Medicine&lt;/em&gt;, &lt;em&gt;130&lt;/em&gt;,
104217. &lt;a class="link" href="https://doi.org/10.1016/j.compbiomed.2021.104217" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.compbiomed.2021.104217&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-trayanova2020how" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Trayanova, N. A., Doshi, A. N., &amp;amp; Prakosa, A. (2020). How personalized
heart modeling can help treatment of lethal arrhythmias:
&lt;span &gt;A&lt;/span&gt; focus on
ventricular tachycardia ablation strategies in post‐infarction patients.
&lt;em&gt;WIREs Systems Biology and Medicine&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(3).
&lt;a class="link" href="https://doi.org/10.1002/wsbm.1477" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1002/wsbm.1477&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-doxygen" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;van Heesch, D. (2023). &lt;em&gt;Doxygen 1.9.7&lt;/em&gt;. Doxygen.
&lt;a class="link" href="https://www.doxygen.nl" target="_blank" rel="noopener"
 &gt;https://www.doxygen.nl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-scipy" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T.,
Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J.,
van der Walt, S. J., Brett, M., Wilson, J., Millman, K. J., Mayorov, N.,
Nelson, A. R. J., Jones, E., Kern, R., Larson, E., Carey, C. J., Polat,
İlhan, Feng, Y., Moore, E. W., VanderPlas, J., Laxalde, D., Perktold,
J., Cimrman, R., Henriksen, I., Quintero, E. A., Harris, C. R.,
Archibald, A. M., Ribeiro, A. H., Pedregosa, F., van Mulbregt, P., &amp;amp;
SciPy 1.0 Contributors. (2020).
&lt;span class="nocase"&gt;&lt;span &gt;SciPy&lt;/span&gt;
1.0: Fundamental Algorithms for Scientific Computing in
Python&lt;/span&gt;. &lt;em&gt;Nature Methods&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;, 261&amp;ndash;272.
&lt;a class="link" href="https://doi.org/10.1038/s41592-019-0686-2" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41592-019-0686-2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-winfree1994electrical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Winfree, A. T. (1994). Electrical turbulence in three-dimensional heart
muscle. &lt;em&gt;Science&lt;/em&gt;, &lt;em&gt;266&lt;/em&gt;, 1003&amp;ndash;1006.
&lt;a class="link" href="https://doi.org/10.1126/science.7973648" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1126/science.7973648&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;In this way, it is similar to its namesake in the &lt;em&gt;Lord of the
Rings&lt;/em&gt;, where Ithildin is an Elven substance that reveals a hidden
gateway to another realm after a spell is cast (&lt;a class="link" href="#ref-tolkien1954fellowship" &gt;Tolkien,
1954&lt;/a&gt;).&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Marcotte &amp;amp; Grigoriev (&lt;a class="link" href="#ref-marcotte2017dynamical" &gt;2017&lt;/a&gt;); Byrne
et al. (&lt;a class="link" href="#ref-byrne2015exact" &gt;2015&lt;/a&gt;); Karma
(&lt;a class="link" href="#ref-karma1993spiral" &gt;1993&lt;/a&gt;); Karma
(&lt;a class="link" href="#ref-karma1994electrical" &gt;1994&lt;/a&gt;)&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Aliev &amp;amp; Panfilov (&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;)&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;Bueno-Orovio et al. (&lt;a class="link" href="#ref-bueno2008model" &gt;2008&lt;/a&gt;)&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;Bueno-Orovio et al. (&lt;a class="link" href="#ref-bueno2008model" &gt;2008&lt;/a&gt;)&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:6"&gt;
&lt;p&gt;ten Tusscher &amp;amp; Panfilov (&lt;a class="link" href="#ref-ten2006alternans" &gt;2006&lt;/a&gt;); Niederer
et al. (&lt;a class="link" href="#ref-niederer2019computational" &gt;2019&lt;/a&gt;)&amp;#160;&lt;a href="#fnref:6" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Fast creation of data-driven low-order predictive cardiac tissue
excitation models from recorded activation patterns</title><link>https://kabus.eu/2024/01/03/kabus2024fast/</link><pubDate>Wed, 03 Jan 2024 00:00:00 +0000</pubDate><guid>https://kabus.eu/2024/01/03/kabus2024fast/</guid><description>&lt;img src="https://kabus.eu/2024/01/03/kabus2024fast/header.svg" alt="Featured image of post Fast creation of data-driven low-order predictive cardiac tissue
excitation models from recorded activation patterns
" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;This article was previously published in Computers in Biology and
Medicine 169 (2024) 107949 (&lt;a class="link" href="#ref-kabus2024fast" &gt;Kabus, De Coster, et al.,
2024&lt;/a&gt;) and is a chapter of my
&lt;a class="link" href="https://kabus.eu/diss" &gt;dissertation&lt;/a&gt;.
The full thesis is available online as a
&lt;a class="link" href="https://dkabus.gitlab.io/thesis-phd/kabus2025dissertation.pdf" target="_blank" rel="noopener"
 &gt;PDF&lt;/a&gt; or
can be read &lt;a class="link" href="https://kabus.eu/diss" &gt;chapter by chapter on this website&lt;/a&gt;.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Desmond Kabus&lt;sup&gt;1,2&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0002-6965-5211" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0002-6965-5211&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tim De Coster&lt;sup&gt;2&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0002-4942-9866" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0002-4942-9866&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Antoine A.F. de Vries&lt;sup&gt;2&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0002-4787-7155" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0002-4787-7155&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Daniël A. Pijnappels&lt;sup&gt;2&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0001-6731-4125" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0001-6731-4125&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hans Dierckx&lt;sup&gt;1&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0003-0899-8082" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0003-0899-8082&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Institutions:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Department of Mathematics, KU Leuven Campus Kortrijk (KULAK), Etienne Sabbelaan 53, 8500 Kortrijk, Belgium&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Laboratory of Experimental Cardiology, Leiden University Medical Center (LUMC), Albinusdreef 2, 2333 ZA Leiden, the Netherlands&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Correspondence:&lt;/strong&gt; &lt;a class="link" href="mailto:h.dierckx@kuleuven.be" &gt;h.dierckx@kuleuven.be&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DOI:&lt;/strong&gt;
&lt;a class="link" href="https://doi.org/10.1016/j.compbiomed.2024.107949" target="_blank" rel="noopener"
 &gt;10.1016/j.compbiomed.2024.107949&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keywords:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;data-driven modelling&lt;/li&gt;
&lt;li&gt;surrogate modelling&lt;/li&gt;
&lt;li&gt;machine learning&lt;/li&gt;
&lt;li&gt;digital twin&lt;/li&gt;
&lt;li&gt;excitable media&lt;/li&gt;
&lt;li&gt;cardiac electrophysiology&lt;/li&gt;
&lt;li&gt;optical voltage mapping&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Models of excitation waves can be created in minutes from experiment
to fitting.&lt;/li&gt;
&lt;li&gt;One variable in space and time is sufficient to create a working
excitation model.&lt;/li&gt;
&lt;li&gt;A polynomial can predict excitation waves based on useful extracted
features.&lt;/li&gt;
&lt;li&gt;Spiral waves in heart muscle tissue can be predicted from focal wave
data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Excitable systems give rise to important phenomena such as heat waves,
epidemics and cardiac arrhythmias. Understanding, forecasting and
controlling such systems requires reliable mathematical representations.
For cardiac tissue, computational models are commonly generated in a
reaction-diffusion framework based on detailed measurements of ionic
currents in dedicated single-cell experiments.&lt;/p&gt;
&lt;p&gt;Here, we show that recorded movies at the tissue-level of stochastic
pacing in a single variable are sufficient to generate a mathematical
model. Via exponentially weighed moving averages, we create additional
state variables, and use simple polynomial regression in the augmented
state space to quantify excitation wave dynamics. A spatial
gradient-sensing term replaces the classical diffusion as it is more
robust to noise. Our pipeline for model creation is demonstrated for an
in-silico model and optical voltage mapping recordings of cultured human
atrial myocytes and only takes a few minutes.&lt;/p&gt;
&lt;p&gt;Our findings have the potential for widespread generation, use and
on-the-fly refinement of personalised computer models for non-linear
phenomena in biology and medicine, such as predictive cardiac digital
twins.&lt;/p&gt;
&lt;div id="sec:fast:introduction"&gt;
&lt;h1 id="introduction"&gt;Introduction
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;A wide variety of phenomena qualify as excitable systems, such as
epidemics (&lt;a class="link" href="#ref-noble1974geographic" &gt;Noble, 1974&lt;/a&gt;) or electrical
excitation in the brain (&lt;a class="link" href="#ref-bressloff2014waves" &gt;Bressloff, 2014&lt;/a&gt;) or
heart (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;). Reliable and
accurate mathematical modelling of these systems is necessary to
forecast their evolution in time. These predictions are useful for
decision making to steer these systems to a desired state.&lt;/p&gt;
&lt;p&gt;To diagnose and treat heart rhythm disorders, a common health burden,
the scientific community is creating sophisticated models for different
processes in the heart with the goal of building a digital twin of each
patient&amp;rsquo;s heart, i.e., a full recreation of their heart in the computer
(&lt;a class="link" href="#ref-niederer2019computational" &gt;Niederer et al., 2019&lt;/a&gt;; &lt;a class="link" href="#ref-trayanova2020how" &gt;Trayanova et
al., 2020&lt;/a&gt;). One of them is the contraction of
the heart, which is controlled by excitation waves travelling through
the myocardium (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;). An
in-silico model of cardiac tissue electrophysiology is a mathematical
model that is able to describe the dynamics of the excitation patterns
(&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;). Typically, in-silico
models for cardiac electrophysiology fall into one of two categories. On
the one hand, there are the mathematical models that focus mostly on the
overall dynamics in the tissue (&lt;a class="link" href="#ref-aliev1996simple" &gt;Aliev &amp;amp; Panfilov,
1996&lt;/a&gt;; &lt;a class="link" href="#ref-barkley1991model" &gt;Barkley, 1991&lt;/a&gt;;
&lt;a class="link" href="#ref-bueno2008model" &gt;Bueno-Orovio et al., 2008&lt;/a&gt;; &lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma,
1998&lt;/a&gt;; &lt;a class="link" href="#ref-fitzhugh1961impulses" &gt;FitzHugh,
1961&lt;/a&gt;; &lt;a class="link" href="#ref-marcotte2017dynamical" &gt;Marcotte &amp;amp; Grigoriev,
2017&lt;/a&gt;; &lt;a class="link" href="#ref-nagumo1962active" &gt;Nagumo et al.,
1962&lt;/a&gt;). While most of these models have
continuous state variables, there are also cellular automata where each
cell can only be in one of finitely many states (&lt;a class="link" href="#ref-moe1964computer" &gt;Moe et al.,
1964&lt;/a&gt;). On the other hand there are detailed
models that aim to model each current relevant for the specific use case
of the model across the cell membrane (&lt;a class="link" href="#ref-courtemanche1998ionic" &gt;Courtemanche et al.,
1998&lt;/a&gt;; &lt;a class="link" href="#ref-majumder2016model" &gt;Majumder et al.,
2016&lt;/a&gt;; &lt;a class="link" href="#ref-paci2013model" &gt;Paci et al., 2013&lt;/a&gt;).
Typically, these models are fit using in-vitro data obtained from
patch-clamping of single cells, or from optical voltage or
Ca&lt;sup&gt;2+&lt;/sup&gt;
 mapping of monolayers or of the epicardium. Capturing
cell memory is also crucial in the modelling of cardiac tissue. This may
for instance be done via ionic current gates opening and closing or
exponentially decaying memory variables (&lt;a class="link" href="#ref-fox2002period" &gt;Fox et al.,
2002&lt;/a&gt;; &lt;a class="link" href="#ref-wei2015role" &gt;Wei et al., 2015&lt;/a&gt;). A
common property in the models focusing on the overall dynamics rather
than the individual ion currents is that the state variables used in
them often do not have an equivalent in the physical tissue. These
internal, hidden states are not fit to actual data, instead they are
often chosen as a means to an end.&lt;/p&gt;
&lt;p&gt;A so-called surrogate model is a mathematically simpler model that is
fit to an existing, more detailed ionic model. For instance,
Bueno-Orovio et al. (&lt;a class="link" href="#ref-bueno2008model" &gt;2008&lt;/a&gt;) provide parameter sets
for their model to act as a surrogate for the models by Priebe &amp;amp;
Beuckelmann (&lt;a class="link" href="#ref-priebe1998simulation" &gt;1998&lt;/a&gt;) and ten Tusscher et al.
(&lt;a class="link" href="#ref-tentusscher2004model" &gt;2004&lt;/a&gt;). Surrogate modelling can be used to
create patient-specific models much more quickly, such that they can be
used in a clinical setting after a relatively short amount of time,
e.g. during a hospital visit (&lt;a class="link" href="#ref-gillette2021framework" &gt;Gillette et al.,
2021&lt;/a&gt;). The current models of cardiac tissue
electrophysiology are typically not fit to actual recordings of the wave
dynamics. We are in this work fitting models to such data in a
controlled case, i.e., dense data from isotropic monolayers, which also
enables us to directly compare forward simulation to experiment.&lt;/p&gt;
&lt;p&gt;Machine learning has become a useful tool in cardiac electrophysiology.
The eikonal equation has been solved using physics-informed neural
networks, which means that the local arrival time of the excitation wave
can be recovered well for the entire domain based on relatively few data
points (&lt;a class="link" href="#ref-sahlicostabal2020eikonalpinns" &gt;Costabal et al., 2020&lt;/a&gt;).
This method is limited, however, to only model excitation, not recovery
and re-excitation. Physics-informed neural networks have also been used
to solve the reaction-diffusion systems for Aliev &amp;amp; Panfilov
(&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;) dynamics, as well as recovering one or
two parameters of this model from data (&lt;a class="link" href="#ref-herreromartin2022eppinns" &gt;Martin et al.,
2022&lt;/a&gt;). Reservoir computing approaches,
such as echo-state networks, can also be used to predict the temporal
evolution of cardiac action potentials (&lt;a class="link" href="#ref-shahi2022machine" &gt;Shahi et al.,
2022&lt;/a&gt;). None of these methods are yet used to
create full standalone tissue models for cardiac electrophysiology in a
data-driven way.&lt;/p&gt;
&lt;p&gt;A recent step forward in in-vitro models for cardiac electrophysiology
was the conditional immortalisation of human atrial myocytes (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar
et al., 2022&lt;/a&gt;). This resulted in cell lines
allowing the generation of near infinite numbers of fully functional
human atrial myocytes called hiAMs. These hiAMs overcome a major problem
associated with the use of heart muscle cells of animals for in-vitro
modelling, namely the existence of species specific differences in
electrophysiological behaviour including differences in the action
potential duration (APD) and shape, conduction velocity (CV), and wave
propagation (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;; &lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et
al., 2022&lt;/a&gt;; &lt;a class="link" href="#ref-joukar2021comparative" &gt;Joukar,
2021&lt;/a&gt;; &lt;a class="link" href="#ref-majumder2016model" &gt;Majumder et al.,
2016&lt;/a&gt;; &lt;a class="link" href="#ref-ohara2012quantitative" &gt;O&amp;rsquo;Hara &amp;amp; Rudy,
2012&lt;/a&gt;). No in-silico version of the
electrophysiological behaviour of this cell line has yet been published.&lt;/p&gt;
&lt;p&gt;In this work, we present a general method to create data-driven
in-silico tissue models from just one recorded variable over
two-dimensional space and time. The method is more generally applicable
and faster than the conventional creation of new models. Our method
requires only minimal assumptions and works by expanding the data to a
multi-dimensional state space. Models created with our method are
designed directly at the tissue scale, instead of needing extra steps
transitioning from the cell kinetics to tissue dynamics. We both
re-create an existing in-silico model with our method as a surrogate
model, and use this method to build an in-silico tissue model for hiAMs
only from optical voltage mapping (OVM) data. Note that our model
creation pipeline is not specific to this cell line and may be applied
to OVM data in general. The generated models are specialised to the
tissues for which data is contained in the data set. However, since
model generation is cheap and robust, models for different tissues can
easily be created.&lt;/p&gt;
&lt;p&gt;The steps of our method are outlined graphically in
Fig. &lt;a class="link" href="#fig:fast:process" &gt;1&lt;/a&gt;. In section &lt;a class="link" href="#sec:fast:methods" &gt;2&lt;/a&gt;, we
describe how the data are acquired
(section &lt;a class="link" href="#sec:fast:data:acquisition" &gt;2.1&lt;/a&gt;), how they are processed,
expanded with additional state variables
(section &lt;a class="link" href="#sec:fast:state:space:augmentation" &gt;2.2&lt;/a&gt;), statistically
binned in multi-dimensional state space histograms
(section &lt;a class="link" href="#sec:fast:state:space:histograms" &gt;2.3&lt;/a&gt;), and how the
data-driven models are finally fit to them
(section &lt;a class="link" href="#sec:fast:model:fitting" &gt;2.4&lt;/a&gt;). In
section &lt;a class="link" href="#sec:fast:results" &gt;3&lt;/a&gt;, we present results from the models that
are generated with this method. Finally, in
sections &lt;a class="link" href="#sec:fast:discussion" &gt;4&lt;/a&gt;, &lt;a class="link" href="#sec:fast:conclusion" &gt;5&lt;/a&gt;, we wrap
up by summarising the method and discussing its advantages and
shortcomings, as well as giving an outlook on how the models fit by our
method can be improved.&lt;/p&gt;
&lt;div id="fig:fast:process"&gt;
&lt;p&gt;&lt;img alt="Outline of the model fitting procedure" class="gallery-image" data-flex-basis="548px" data-flex-grow="228" height="1744" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/01/03/kabus2024fast/figures/process.png" srcset="https://kabus.eu/2024/01/03/kabus2024fast/figures/process_hu_700af0dc888bd257.png 800w, https://kabus.eu/2024/01/03/kabus2024fast/figures/process_hu_8ea29bf562168b2f.png 1600w, https://kabus.eu/2024/01/03/kabus2024fast/figures/process_hu_d68774f261d46cc4.png 2400w, https://kabus.eu/2024/01/03/kabus2024fast/figures/process.png 3983w" width="3983"&gt;&lt;/p&gt;
&lt;p&gt;Figure 1: &lt;strong&gt;Outline of the model fitting procedure.&lt;/strong&gt; In the first step,
relevant features are extracted from the spatio-temporal data
$u$. Then the state space is discretised and
histogrammed. The value of the time-derivative
$\dot u$ of the main variable is analysed
statistically in this state space. A model can then be fit to the state
space and used to predict the evolution of the medium.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:fast:methods"&gt;&lt;/p&gt;
&lt;h1 id="methods"&gt;Methods
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:fast:data:acquisition"&gt;&lt;/p&gt;
&lt;h2 id="data-acquisition"&gt;Data acquisition
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In this work, we study spatio-temporal data from two excitable media: an
in-vitro data set from OVM of monolayers of cardiomyogenically
differentiated hiAMs and an in-silico data set from finite-differences
simulations solving the mono-domain equations (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;). In this section, we outline how these
data are generated and processed.&lt;/p&gt;
&lt;div id="sec:fast:ovm"&gt;
&lt;h3 id="optical-voltage-mapping"&gt;Optical voltage mapping
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;To obtain a two-dimensional recording of the electrical activity of
tissue as an in-vitro data set, we performed OVM of hiAM monolayers in
10- wells of six-well culture plates (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al.,
2022&lt;/a&gt;). The recorded data consist of one variable,
i.e., the measured difference in intensity of the light emitted by the
voltage-sensitive dye, over space and time. We have used a
MiCAM05-Ultima camera by SciMedia with a resolution of 100x100 pixels.
With the particular configuration of lenses, each square pixel has a
size of $\Delta x = {250~\mathrm{{u}{m}}}$. For the
recordings, we use the lowest supported duration between frames of
$\Delta t = {1~\mathrm{{m}{s}}}$. We record
${61440}$ consecutive frames, which corresponds to
slightly more than a minute and lines up nicely in the camera&amp;rsquo;s file
format. For modelling purposes, we assume that the monolayer is
approximately homogeneous and isotropic.&lt;/p&gt;
&lt;p&gt;To excite the tissue, we place a bi-polar stimulation electrode with two
poles with a diameter of and inter-electrode spacing of at the well&amp;rsquo;s
boundary, and stimulate with $N_\text{pulse}=200$
current pulses of random amplitude, random duration, and random timing.
We call this procedure the stochastic burst pacing (SBP) protocol,
inspired by stochastic pacing experiments done by Krogh-Madsen et al.
(&lt;a class="link" href="#ref-kroghmadsen2005ionic" &gt;2005&lt;/a&gt;). The amplitudes
$A_n$ are sampled from a uniform distribution
$\operatorname{U}{{\left( {-0.8~\mathrm{{m}{A}}}, {0.8~\mathrm{{m}{A}}} \right)}}$.
The times $T_n = T_{\text{u}} + T_{\text{e}}$ between
subsequent pulses are sampled from a combination of a uniform and
exponential distribution: &lt;span &gt;$$
\begin{aligned}
T_{\text{u}} &amp;\sim \operatorname{U}{{\left( {0~\mathrm{{m}{s}}}, {50~\mathrm{{m}{s}}} \right)}}
\\
T_{\text{e}} &amp;\sim \operatorname{Exp}{{\left( 1/{200~\mathrm{{m}{s}}} \right)}}
\end{aligned}
\qquad{(1)}$$&lt;/span&gt; where
$\operatorname{U}{{\left( a, b \right)}}$ denotes the
uniform distribution on the interval
${{\left[ a, b \right]}}$ and
$\operatorname{Exp}{{\left( \lambda \right)}}$ the
exponential distribution with decay rate $\lambda$:
&lt;span &gt;$$
\operatorname{Exp}{{\left( \lambda \right)}}{{\left( t \right)}} \propto
\begin{cases}
{{\mathrm{e}^{-\lambda t}}} &amp; t \ge 0
\\
0 &amp; t &lt; 0
\end{cases}
\qquad{(2)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We choose this probability distribution of durations such that, on the
one hand, it covers a typical range of values, but on the other,
occasionally, durations are sampled that are much longer than usual.&lt;/p&gt;
&lt;p&gt;The durations
$\tau_n = \tau_{\text{u}} + \tau_{\text{e}}$ of
stimulation are sampled from a similar probability distribution:
&lt;span &gt;$$
\begin{aligned}
\tau_{\text{u}} &amp;\sim \operatorname{U}{{\left( {0~\mathrm{{m}{s}}}, {10~\mathrm{{m}{s}}} \right)}}
\\
\tau_{\text{e}} &amp;\sim \operatorname{Exp}{{\left( 1/{40~\mathrm{{m}{s}}} \right)}}
\end{aligned}
\qquad{(3)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The stimulus current then takes the form:
&lt;span &gt;$$
I_\text{stim}{{\left( t \right)}}
=
\sum_{n=1}^{N_\text{pulse}}
A_n {{\left[ \operatorname{H}{{\left( t - t_n \right)}} - \operatorname{H}{{\left( t - t_n - \tau_n \right)}} \right]}}
\qquad{(4)}$$&lt;/span&gt; with the start time of
the $n$-th pulse:
&lt;span &gt;$$
t_n
=
\sum_{m=1}^{n} {{\left[ T_{m} + \tau_{m} \right]}}
\qquad{(5)}$$&lt;/span&gt; and the Heaviside
function: &lt;span &gt;$$
\operatorname{H}{{\left( t \right)}}
=
\begin{cases}
 0 &amp; t &lt; 0
 \\
 \frac{1}{2} &amp; t = 0
 \\
 1 &amp; t &gt; 0
\end{cases}
\qquad{(6)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We preprocess these data in a similar way as in a previous publication
(&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al., 2022&lt;/a&gt;) by Gaussian blurring
with a kernel size of three grid points and rescale the data to
zero-mean and unit variance.&lt;/p&gt;
&lt;p&gt;To bring the resting state close to zero, we subtract the baseline of
the data. As baseline, we take the most common recorded intensity in
each 4x4 pixel neighbourhood over a time span of This is based on the
assumption that this most common value corresponds to the resting state.&lt;/p&gt;
&lt;p&gt;The final preprocessing step for this data set is to smooth the data
using an exponential moving average (EMA) with
$\alpha = 0.1$, which, for time $t \ge
0$ with frame duration $\Delta t$ and the
signal over time $s{{\left( t \right)}}$ at each
position in space, is iteratively defined as:
&lt;span id="eq:fast:ema"&gt;$$
\tilde s{{\left( t \right)}} =
\begin{cases}
 \alpha s{{\left( t \right)}}
 +
 {{\left[ 1 - \alpha \right]}} \tilde s{{\left( t - \Delta t \right)}}
 &amp; t &gt; 0
 \\
 s{{\left( t=0 \right)}}
 &amp; t = 0
\end{cases}
\qquad{(7)}$$&lt;/span&gt; which, within
first-order time discretisation, is equivalent to:
&lt;span &gt;$$
\tilde s{{\left( t \right)}}
=
{{\mathrm{e}^{-a t}}}
s{{\left( 0 \right)}}
+
a
\int_0^t
 {{\mathrm{e}^{a {{\left[ t' - t \right]}}}}} s{{\left( t' \right)}}
\;\mathrm{d} t'
\qquad{(8)}$$&lt;/span&gt; with
$a = \frac{\alpha}{\Delta t} &gt; 0$.&lt;/p&gt;
&lt;p&gt;We refer to this recording as the OVM data set and
$u{{\left( t, {{\bm{{x}}}} \right)}}$ denotes the
unit-less signal after preprocessing scaled such that the resting state
is close to $u=0$ and the excited state around
$u=1$. This signal $u$ corresponds
to the electrical activity of the cells, i.e., it is linked to the
transmembrane voltage over space and time.&lt;/p&gt;
&lt;p&gt;Only for qualitative comparisons after a data-driven model is fit to the
OVM data set, a second OVM recording is used. In this second recording,
several minutes after rotor formation through burst pacing, the
resulting single, stable spiral wave is observed. This experiment is
also performed with hiAMs in the same six-well format as before and at
the same spatial resolution but at a lower temporal resolution of
between frames. We preprocess these data in the same way as the main OVM
data set.&lt;/p&gt;
&lt;div id="sec:fast:numerical:simulation"&gt;
&lt;h3 id="numerical-simulation"&gt;Numerical simulation
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;To obtain a fully controllable testing data set, we ran an in-silico
experiment similar to the in-vitro experiment in
section &lt;a class="link" href="#sec:fast:ovm" &gt;2.1.1&lt;/a&gt;. We use the finite-differences method to
solve the reaction-diffusion system using a rescaled version of the
minimalist two-variable tissue model by Aliev &amp;amp; Panfilov
(&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;), or in short the AP96 model, whose
equations we will briefly summarise (Eq. &lt;a class="link" href="#eq:fast:ap96" &gt;11&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;As the diffusivity is proportional to the square of the CV, we set it
such that the medium has a measured CV close to that of hiAMs (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton
et al., 2011&lt;/a&gt;; &lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al.,
2022&lt;/a&gt;): &lt;span &gt;$$
\begin{aligned}
D &amp;= {0.0625~\mathrm{{m}{m}{^2}{/}{m}{s}}}
\\
\Rightarrow \text{CV} &amp;= {0.17~\mathrm{{m}{/}{s}}}
\end{aligned}
\qquad{(9)}$$&lt;/span&gt; We rescale the entire
model over time such that its APD has a value of roughly the APD of
hiAMs (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al., 2022&lt;/a&gt;):
&lt;span &gt;$$
r = \frac{\text{APD}_\text{AP96}}{\text{APD}_\text{hiAM}} = \frac{{25.58}}{{100~\mathrm{{m}{s}}}} = {0.2558~\mathrm{\frac{1}{{m}{s}}}}
\qquad{(10)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The time derivatives are rescaled by this time scaling factor
$r$ (&lt;a class="link" href="#ref-aliev1996simple" &gt;Aliev &amp;amp; Panfilov, 1996&lt;/a&gt;):
&lt;span id="eq:fast:ap96"&gt;$$
\begin{aligned}
\partial_t u &amp;= \nabla \cdot D \nabla u - r k u {{\left[ u - a \right]}} {{\left[ u - 1 \right]}} - r u v + \frac{i_\text{stim}}{C}
\\
\partial_t v &amp;= - r \epsilon v - r \epsilon k u {{\left[ u - a - 1 \right]}}
\\
\epsilon &amp;= \epsilon_0 + \frac{\mu_1 v}{u + \mu_2}
\end{aligned}
\qquad{(11)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;By doing so, we introduced the millimetre as the spatial unit and the
millisecond for time into the AP96 model, which uses arbitrary space and
time units. The variables
$u{{\left( t, {{\bm{{x}}}} \right)}}$ and
$v{{\left( t, {{\bm{{x}}}} \right)}}$ remain
unit-less. The value $u=0$ corresponds to the resting
state and when excited, $u$ approaches the value
$u=1$.&lt;/p&gt;
&lt;p&gt;For all other parameters, $a$,
$\epsilon_0$, $k$,
$\mu_1$, and $\mu_2$, which are
all unitless, we use the default values, as in the original publication
by Aliev &amp;amp; Panfilov (&lt;a class="link" href="#ref-aliev1996simple" &gt;1996&lt;/a&gt;). An overview of all
parameters can be found in Table &lt;a class="link" href="#tbl:fast:ap96" &gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;div id="tbl:fast:ap96"&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Parameter&lt;/th&gt;
 &lt;th&gt;Value&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;$a$&lt;/td&gt;
 &lt;td&gt;0.15&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;$\epsilon_0$&lt;/td&gt;
 &lt;td&gt;0.002&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;$k$&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;$\mu_1$&lt;/td&gt;
 &lt;td&gt;0.2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;$\mu_2$&lt;/td&gt;
 &lt;td&gt;0.3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;$D$&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;$r$&lt;/td&gt;
 &lt;td&gt;${0.2558~\mathrm{{m}{s}}}$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Table 1: &lt;strong&gt;Parameters of the rescaled AP96 model.&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;We have run a simulation over ${43104}$ frames at
$\Delta t = {1~\mathrm{{m}{s}}}$ per frame at the
same resolution as for the in-vitro OVM data and with the same SBP
protocol. The length of the simulation was chosen such that the tissue
can fully recover after the last of the 200 pulses of the SBP protocol.
The electrode was placed off-centre at the side of one edge of the
medium. For the time integration, we used a simple forward Euler step
with numerical time step ${0.1~\mathrm{{m}{s}}}$ and
a second-order central finite-differences five-point stencil for the
Laplacian $\nabla
\cdot D \nabla$. The square simulated tissue was homogeneous
and isotropic with no-flux boundary conditions.&lt;/p&gt;
&lt;p&gt;We refer to this synthetic recording as the AP96 data set. We only
include the variable
$u{{\left( t, {{\bm{{x}}}} \right)}}$ in the data
set, as in the in-vitro data set, i.e., the OVM data set. For surrogate
model fitting, we hence also only use one variable related to the
transmembrane voltage of the tissue and not the internal state of the
cell, which in the AP96 model is encapsulated in the second variable
$v{{\left( t, {{\bm{{x}}}} \right)}}$.&lt;/p&gt;
&lt;p&gt;In the subsequent steps, only these data will be used, partially as
training data and partially as testing data. However, we also generate
auxiliary data sets for the AP96 model that are only used for
qualitative comparisons with the data-driven models after fitting.&lt;/p&gt;
&lt;p&gt;To generate a recording of a rotor using the AP96 model, we ran another
two-dimensional simulation at the same resolution in space and time with
initial conditions that led to a spiral wave: The transmembrane voltage
was set to a value of $u = {0.95}$ within the
rectangle
${{\left[ 0, {0.5}L_x \right]}}\times{{\left[ {0.3}L_y, {0.5}L_y \right]}}$,
and the second variable to $v = 1$ within a second
rectangle
${{\left[ 0, {0.5}L_x \right]}}\times{{\left[ {0.4}L_y, {0.6}L_y \right]}}$,
where $L_x = L_y = {100~\mathrm{{m}{m}}}$. Gaussian
blurring with a radius of four grid lengths was applied to avoid steep
gradients at the edge of the rectangles.&lt;/p&gt;
&lt;p&gt;We also measured restitution curves, i.e., APD and CV as functions of
the cycle length (CL) of stimulation. For this, we ran a one-dimensional
cable simulation of the model with the same spatial and temporal
resolution. At the left end of the cable, we stimulated by
instantaneously setting $u$ to a value above the
excitation threshold to trigger a wave travelling to the right. We
repeatedly stimulated starting at a CL of decreasing in steps of until
we reached a CL where not every stimulus resulted in a pulse that
traveled through the entire cable, i.e., where 2:1 conduction block
begins.&lt;/p&gt;
&lt;div id="sec:fast:state:space:augmentation"&gt;
&lt;h2 id="state-space-augmentation"&gt;State space augmentation
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The multi-dimensional space spanned by all variables describing the
state of the modelled medium,
${{\bm{{u}}}} = {{{{\left[ u, v, ... \right]}}}^\mathrm{T}}$,
is called state space in contrast to the physical space spanned by
${{\bm{{x}}}}$ and time $t$.&lt;/p&gt;
&lt;p&gt;An in-silico tissue model usually prescribes a unique reaction
${{\bm{{R}}}}$ at each position
${{\bm{{u}}}}$ in the state space. We write a more
generic version of Eq. &lt;a class="link" href="#eq:fast:ap96" &gt;11&lt;/a&gt;, the mono-domain description
(&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al., 2011&lt;/a&gt;):
&lt;span id="eq:fast:reactdiff"&gt;$$
\begin{aligned}
\partial_t {{\bm{{u}}}} &amp;= {{\bm{{P}}}} \nabla \cdot {{\bm{{D}}}} \nabla {{\bm{{u}}}} + {{\bm{{R}}}} {{\left( {{\bm{{u}}}} \right)}}
\end{aligned}
\qquad{(12)}$$&lt;/span&gt; with the diffusivity
matrix ${{\bm{{D}}}}$, where
${{\bm{{P}}}}$ is a diagonal matrix describing which
variables in ${{\bm{{u}}}}$ are to be diffused.&lt;/p&gt;
&lt;p&gt;For the two-variable AP96 model, with
${{\bm{{u}}}} = {{{{\left[ u, v \right]}}}^\mathrm{T}}$
and
${{\bm{{P}}}} = \operatorname{diag}{{\left( 1, 0 \right)}}$,
the state space of the AP96 model is shown in
Fig. &lt;a class="link" href="#fig:fast:ap96:statespace" &gt;2&lt;/a&gt;, coloured only by the component in
$u$ of the reaction term
${{\bm{{R}}}}$. It can be seen that the second
variable $v$ can be used to distinguish cases with
positive and negative reaction at the same value of
$u$. A model that can describe both excitation from a
resting state and recovery to it, is only possible with at least two
variables, such that the inertial manifold can be a loop in the state
space.&lt;/p&gt;
&lt;div id="fig:fast:ap96:statespace"&gt;
&lt;p&gt;&lt;img alt="Reaction in state space of the AP96 model" class="gallery-image" data-flex-basis="277px" data-flex-grow="115" height="2237" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96.statespace.png" srcset="https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96.statespace_hu_f8ec78aa33c05414.png 800w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96.statespace_hu_2cb1ed30e16acbf3.png 1600w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96.statespace_hu_8243f75ea6665f0d.png 2400w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96.statespace.png 2591w" width="2591"&gt;&lt;/p&gt;
&lt;p&gt;Figure 2: &lt;strong&gt;Reaction in state space of the AP96 model.&lt;/strong&gt; The reaction
term ${{\bm{{R}}}}$ is a vector field defining a
reaction at each point ${{\bm{{u}}}}$ in the state
space. Colouring is according to the $u$-component of
the reaction term $R_u$. The trajectory through the
state space from excitation of one point is shown as an example.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In both types of data sets considered in this work, we only have data
for one variable available, namely $u$. To still be
able to differentiate between excitation and recovery, we extract
additional information from $u$ over space and time
to use as additional states for the state space, so-called
augmentations. A well-designed augmented state space unfolds the data
such that cells in the tissue with different histories are identified by
different augmented state vectors.&lt;/p&gt;
&lt;p&gt;As we want to find models that can be used as forward models in a
similar way as in Eq. &lt;a class="link" href="#eq:fast:reactdiff" &gt;12&lt;/a&gt;, we impose two more
requirements on the states with which we augment the state space:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Augmentations should be local in space, i.e., they should only use
states within a neighbourhood around each point.&lt;/li&gt;
&lt;li&gt;Causality must be respected, i.e., only data from previous points in
time and the current point in time may be used to compute each
augmentation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The two augmentations that we found to be most useful for model creation
are presented in the remainder of this section.&lt;/p&gt;
&lt;div id="sec:fast:ema"&gt;
&lt;h3 id="exponential-moving-averages"&gt;Exponential moving averages
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The goal of the state space augmentation is to capture that the model
can evolve differently from the same value of $u$.
This value may increase at the front of waves, during excitation, or
decrease at the wave backs, during recovery.&lt;/p&gt;
&lt;p&gt;One way to sense excitation and recovery is by expanding the state space
with augmented states that capture the passage of time. A naïve way to
do so may be to just include a time-delayed signal, which is a useful
augmentation in phase mapping (&lt;a class="link" href="#ref-gray1995mechanisms" &gt;Gray et al.,
1995&lt;/a&gt;). This is, however, not very robust to
noise, as noise in the past may directly impact the present. Another
option may be to use Hilbert transforms, but as their computation
involves an integral over all of time, they violate causality and are
therefore not meeting our requirements (&lt;a class="link" href="#ref-kuklik2014reconstruction" &gt;Kuklik et al.,
2014&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The EMA (Eq. &lt;a class="link" href="#eq:fast:ema" &gt;7&lt;/a&gt;) is robust to noise and typically lags
behind the signal by an amount of time inversely proportional to the
constant $\alpha$. It can intuitively be used to
differentiate between excitation and recovery for signals
$u$ in-between the resting state and excited state:
If an EMA with a suitable scale $\alpha$ is lower
than $u$, it is likely that the medium is currently
getting excited; if it is higher, the cells are likely recovering.&lt;/p&gt;
&lt;p&gt;Multiple EMAs can be used to be able to capture more advanced behaviour:
With an appropriately chosen $\alpha$, we can
differentiate between states where the tissue is activated a lot and
where it is mostly resting. With such an EMA, restitution
characteristics can be captured.&lt;/p&gt;
&lt;p&gt;Here, we augment the AP96 data with a single EMA
$\tilde u$ with $\alpha =
{0.03}$. For $\tilde u$ in the OVM data, we
use $\alpha =
{0.008}$.&lt;/p&gt;
&lt;div id="sec:fast:gradient:sd"&gt;
&lt;h3 id="standard-deviation-as-a-proxy-for-the-absolute-gradient"&gt;Standard deviation as a proxy for the absolute gradient
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;We also conjecture that information about the slopes and higher
derivatives in space of $u$ is useful for a well
fitting data-driven model. In the reaction-diffusion description, the
Laplacian is used to capture curvature effects in space. Because it is a
second-order derivative, it is very sensitive to noise. The absolute
value of the gradient in combination with other state space variables
can also encode much information about the slopes of
$u$. We use a proxy for the absolute gradient in a
neighbourhood with high robustness with respect to noise. Such a proxy
is the standard deviation (SD) of the signal $u$ in
the local neighbourhood up to a radius $R$ around
${{\bm{{x}}}}$.&lt;/p&gt;
&lt;p&gt;It can be shown analytically that the SD is proportional to the absolute
gradient of a plane
$h{{\left( {{\bm{{x}}}} \right)}} = {{{{\bm{{w}}}}}^\mathrm{T}} {{\bm{{x}}}} + b$,
which evaluates to
${{\left\lVert \nabla h \right\rVert}} = {{\left\lVert {{\bm{{w}}}} \right\rVert}}$.
The SD in a spherical neighbourhood $\mathcal N$ up
to a radius $R$ around the origin can be found via
integration in polar coordinates $r$,
${\varphi}$: &lt;span &gt;$$
\begin{aligned}
\sigma_h^2
&amp;=
{{\left\langle {{\left[ h-b \right]}}^2 \right\rangle}}
=
\frac {1}{\int_{\mathcal N} \mathrm{d} {{\bm{{x}}}}\;}
\int_{\mathcal N} \mathrm{d} {{\bm{{x}}}}\;
{{\left[ {{{{\bm{{w}}}}}^\mathrm{T}} {{\bm{{x}}}} \right]}}^2
\\
\sigma_h^2
&amp;=
\frac {1}{\pi R^2}
\int_{0}^{R} \mathrm{d} r\;
\int_{0}^{2\pi} \mathrm{d} {\varphi}\;
{{\left[ w_x r\cos{\varphi}+ w_y r\sin{\varphi}\right]}}^2
\\
\sigma_h
&amp;=
\frac {R}{2} {{\left\lVert {{\bm{{w}}}} \right\rVert}}
\end{aligned}
\qquad{(13)}$$&lt;/span&gt; Analogously, a
similar relation can be shown in three dimensions:
&lt;span &gt;$$
\sigma_h = \frac{R}{\sqrt{5}} {{\left\lVert {{\bm{{w}}}} \right\rVert}}
\qquad{(14)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Assuming that the signal $u$ varies slow enough that
a linear function can approximate it well within the chosen
neighbourhood, the SD can be used to compute its absolute gradient.
Despite the relatively high time-derivative $\dot u$
of the cardiac action potential during its upstroke, and hence
$\nabla u$, we can make this assumption if the
resolution is sufficiently high.&lt;/p&gt;
&lt;p&gt;Note that the SD has the useful property, that it can still be computed
at or near the boundary of the medium, just based on fewer samples than
for fully interior points.&lt;/p&gt;
&lt;p&gt;To capture gradient information, we augment the AP96 data set with an SD
variable for the neighbourhood up to a radius $R =
5 \Delta x$ around each point
${{\bm{{x}}}}$ and denote it by
$g$. For $g$ in the OVM data set,
we use a larger neighbourhood with $R =
8 \Delta x$ for the SD calculation.&lt;/p&gt;
&lt;div id="sec:fast:state:space:histograms"&gt;
&lt;h2 id="state-space-histograms"&gt;State space histograms
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In the usual dynamics of the excitable systems we study in this work,
not all points ${{\bm{{u}}}}$ in the state space are
equally likely. Some state vectors ${{\bm{{u}}}}$ may
be quite common as being part of the inertial manifold, while others
might be completely absent in the data.&lt;/p&gt;
&lt;p&gt;For example, for the AP96 model with
${{\bm{{u}}}} = {{{{\left[ u, v \right]}}}^\mathrm{T}}$,
it can be seen in Fig. &lt;a class="link" href="#fig:fast:ap96:hs2duv:count" &gt;3&lt;/a&gt; that a part of
the state space is not visited and most of the samples are on the
inertial manifold, a closed approximately one-dimensional loop. We
conjecture that in higher dimensions the state space is even more
sparse, e.g. in case of detailed ionic models, some of which contain
more than ten state variables.&lt;/p&gt;
&lt;div id="fig:fast:ap96:hs2duv:count"&gt;
&lt;p&gt;&lt;img alt="Likelihood of each point in the state space of the AP96 model" class="gallery-image" data-flex-basis="264px" data-flex-grow="110" height="2237" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96.hs2duv.count.png" srcset="https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96.hs2duv.count_hu_cbb0880692ab017d.png 800w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96.hs2duv.count_hu_148fb001b6b281a5.png 1600w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96.hs2duv.count_hu_c7c7c57bb909ce36.png 2400w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96.hs2duv.count.png 2468w" width="2468"&gt;&lt;/p&gt;
&lt;p&gt;Figure 3: &lt;strong&gt;Likelihood of each point in the state space of the AP96
model&lt;/strong&gt; for the numerical simulation generating the data set used for
surrogate model fitting.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;With the chosen state space expansion
(section &lt;a class="link" href="#sec:fast:state:space:augmentation" &gt;2.2&lt;/a&gt;), the state vector is
${{\bm{{u}}}} = {{{{\left[ u, \tilde u, g \right]}}}^\mathrm{T}}$.
We discretise the state space to 100 bins in each dimension and collect
the data in a multi-dimensional histogram. This results in
three-dimensional state space histograms for the two data sets with
${10}^6$ bins each. For efficient memory usage, these
histograms are computationally implemented using multi-dimensional
sparse arrays. Regions in the state space containing no data do not take
up memory in this way. We can then fit the models to the average value
inside each bin instead of to all data points. This efficient memory
management enables building even higher-dimensional state spaces, though
in this work we require only three variables.&lt;/p&gt;
&lt;p&gt;The time-derivative $\dot u$ fully defines the
reaction of the data-driven models developed in this work. The reason
for this is that all other variables in the state vector
${{\bm{{u}}}}$ can be derived from the one variable
$u$ over space and time.&lt;/p&gt;
&lt;p&gt;In a well chosen state space, for each state vector
${{\bm{{u}}}}$, the reaction
$\dot u$ is the same, i.e., the states are well
separated. Therefore, we calculate the mean value of
$\dot u$ computed using finite-differences at each
bin in the discretised state space, as well as its SD. This mean value
of $\dot u$ takes a similar role as
$R_u$ for the AP96 model and &amp;ldquo;colours&amp;rdquo; the state
space in a comparable way to $R_u$ in
Fig. &lt;a class="link" href="#fig:fast:ap96:statespace" &gt;2&lt;/a&gt;.&lt;/p&gt;
&lt;div id="sec:fast:model:fitting"&gt;
&lt;h2 id="model-fitting"&gt;Model fitting
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A data-driven model will be fit to the data in state space as a
scalar-valued function $f$:
&lt;span &gt;$$
f : {{\bm{{u}}}} \mapsto \dot u
\qquad{(15)}$$&lt;/span&gt; such that the model
consists of the state space expansion ${{\bm{{u}}}}$
by calculating the EMA (Eq. &lt;a class="link" href="#eq:fast:ema" &gt;7&lt;/a&gt;), the SD within the
neighbourhoods around each point
(section &lt;a class="link" href="#sec:fast:gradient:sd" &gt;2.2.2&lt;/a&gt;), as well as the forward Euler
step: &lt;span id="eq:fast:model:forward"&gt;$$
u{{\left( t+\Delta t, {{\bm{{x}}}} \right)}}
=
u{{\left( t, {{\bm{{x}}}} \right)}}
+
\Delta t
f{{\left( {{\bm{{u}}}}{{\left( t, {{\bm{{x}}}} \right)}} \right)}}
\qquad{(16)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As the model function $f$, we choose a low-order
polynomial which is linear with respect to each of the components:
&lt;span id="eq:fast:model:general"&gt;$$
f{\left({{\bm{{u}}}}\right)}
=
w_{\tilde{u} g u} \tilde{u} g u
+ w_{\tilde{u} g} \tilde{u} g
+ w_{\tilde{u} u} \tilde{u} u
+ w_{\tilde{u}} \tilde{u}
+ w_{g u} g u
+ w_{g} g
+ w_{u} u
+ w
\qquad{(17)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Assuming that the SD $g$ approximates the absolute
gradient ${{\left\lVert \nabla u \right\rVert}}$ of
the main state variable $u$ well, we hence
essentially describe the propagation of the activation waves using
advection, instead of diffusion (Eq. &lt;a class="link" href="#eq:fast:reactdiff" &gt;12&lt;/a&gt;):
&lt;span id="eq:fast:advection"&gt;$$\begin{aligned}
\partial_t u
&amp;=
f{{\left( {{\bm{{u}}}} \right)}}
=
f_0{{\left( u, \tilde u \right)}}
+
c_1
f_1{{\left( u, \tilde u \right)}}
{{\left\lVert \nabla u \right\rVert}}
\\
f_0{{\left( u, \tilde u \right)}}
&amp;=
w
+
w_u u
+
w_{\tilde u} \tilde u
+
w_{\tilde u u} \tilde u u
\\
f_1{{\left( u, \tilde u \right)}}
&amp;=
w_{g}
+
w_{g u} u
+
w_{\tilde u g} \tilde u
+
w_{\tilde u g u} \tilde u u
\\
\tilde u{{\left( t \right)}}
&amp;=
{{\mathrm{e}^{-a t}}}
u{{\left( 0 \right)}}
+
a
\int_0^t
 {{\mathrm{e}^{a {{\left[ t' - t \right]}}}}} u{{\left( t' \right)}}
\;\mathrm{d} t'
\end{aligned}\qquad{(18)}$$&lt;/span&gt; with
real-valued scalar constants $a, c_1, w_{...}$ and
$g \approx c_1 {{\left\lVert \nabla u \right\rVert}}$.
For an appropriate choice of parameters, obtained for instance through
fitting, Eq. &lt;a class="link" href="#eq:fast:advection" &gt;18&lt;/a&gt; describe a model of excitation in
an advection-regression framework.&lt;/p&gt;
&lt;p&gt;To prevent the fit model from leaving the valid state space, after each
forward Euler step, we clip the predicted $u$ to the
range ${{\left[ u_{\min},u_{\max} \right]}}$ for
which we have training data, the so-called valid range. Note that this
also limits the EMA $\tilde u$ to that range, while
the SD $g$ can still leave the range observed in the
data, i.e., for larger than typical slopes.&lt;/p&gt;
&lt;p&gt;In each step forward in time,
$t \leftarrow t + \Delta t$, we update the state
vector
${{\bm{{u}}}} = {{{{\left[ u, \tilde u, g \right]}}}^\mathrm{T}}$
of the data-driven model according to the following pseudocode:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Compute the new value of $u$ at each point
${{\bm{{x}}}}$ using the polynomial
$f$ (Eq. &lt;a class="link" href="#eq:fast:model:forward" &gt;16&lt;/a&gt;;
Eq. &lt;a class="link" href="#eq:fast:model:general" &gt;17&lt;/a&gt;):
&lt;span &gt;$$
 \begin{aligned}
 &amp;u \leftarrow u + \Delta t f{{\left( {{\bm{{u}}}} \right)}}
 \\
 &amp;u \leftarrow \max{{\left( u_{\min}, \min{{\left( u, u_{\max} \right)}} \right)}}
 \end{aligned}
 \qquad{(19)}$$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Update the EMA $\tilde u$ based on its old value
and the updated $u$ (Eq. &lt;a class="link" href="#eq:fast:ema" &gt;7&lt;/a&gt;):
&lt;span &gt;$$
 \tilde u \leftarrow \alpha u + {{\left[ 1 - \alpha \right]}} \, \tilde u
 \qquad{(20)}$$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Calculate the SD $g$ of the updated
$u$ (section &lt;a class="link" href="#sec:fast:gradient:sd" &gt;2.2.2&lt;/a&gt;):
&lt;span &gt;$$
 g \leftarrow {{\left\langle u^2 - {{\left\langle u \right\rangle}}^2 \right\rangle}}^{\frac{1}{2}}
 \qquad{(21)}$$&lt;/span&gt; where
${{\left\langle \bullet \right\rangle}}$ denotes
the average of all points in the spherical neighbourhood
$\mathcal N$ of each position
${{\bm{{x}}}}$ up to a radius
$R$.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To find the optimal model function $f$, we use the
least-squares algorithm to find the polynomial of the given order which
minimises the loss: &lt;span &gt;$$
\mathcal L{{\left( f \right)}} =
\sum_{{{\bm{{u}}}} \in \mathcal U}
N{{\left( {{\bm{{u}}}} \right)}}
{{\left[ \dot u{{\left( {{\bm{{u}}}} \right)}} - f{{\left( {{\bm{{u}}}} \right)}} \right]}}^2
+
\sum_{{{\bm{{u}}}} \in \mathcal R}
f^2{{\left( {{\bm{{u}}}} \right)}}
\qquad{(22)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;where $\mathcal U$ denotes the centres of all bins in
the discretised state space containing at least one sample, i.e., one
data point, and $N{{\left( {{\bm{{u}}}} \right)}}$ is
the number of samples in the bin ${{\bm{{u}}}}$. To
regularise the model space in favour of more physically realistic
models, we add additional co-location points
$\mathcal R$ outside of
$\mathcal U$ at which we assume
$f$ should be close to zero. We choose these
co-location points $\mathcal R$ by Latin hypercube
sampling and only keep points for which no data is contained in the data
set $\mathcal U$ (&lt;a class="link" href="#ref-mckay2000comparison" &gt;McKay et al.,
2000&lt;/a&gt;). We choose the number
$N_{\mathcal R}$ of co-location points
$\mathcal R$ based on the number
$N_{\mathcal U}$ of non-empty bins in the data set
$\mathcal U$: &lt;span &gt;$$
N_{\mathcal R}
=
{0.5}
\,
N_{\mathcal U}
\qquad{(23)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As training data spanning the state space
$\mathcal U$ that the model is fit to, we use all
frames up to just before the last pulse of the SBP in each recording.
The frames of the last pulse of each recording are then used as testing
data, i.e., as a reference to compare with the predicted frames of the
data-driven model. We only include points at least 20 grid points away
from the boundary to minimise boundary effects on the used data.&lt;/p&gt;
&lt;p&gt;Besides this first simulation that can be directly and quantitatively
compared to the reference for both data sets, we also run simulations
using the data-driven models to compare them qualitatively with the
reference model, i.e., the AP96 model for the synthetic data set, and
the in-vitro model for the OVM data. As the second simulation, for both
data-driven models, we run a similar rectangle-based protocol to the one
used to stimulate spirals for the reference AP96 model
(section &lt;a class="link" href="#sec:fast:numerical:simulation" &gt;2.1.2&lt;/a&gt;). Here, we use the same
stimulation values for $u$, but
$\tilde u = 0.6$ inside the second rectangle and
$\tilde u = 0.1$ outside of it. Thirdly, we also run
a one-dimensional cable simulation to obtain APD and CV restitution
curves for the fit surrogate AP96 model with the same restitution
stimulation protocol as outlined for the reference AP96 model in
section &lt;a class="link" href="#sec:fast:numerical:simulation" &gt;2.1.2&lt;/a&gt;&lt;/p&gt;
&lt;div id="sec:fast:results"&gt;
&lt;h1 id="results"&gt;Results
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;In this section, we present how the state space expansion and
data-driven models as described in section &lt;a class="link" href="#sec:fast:methods" &gt;2&lt;/a&gt;, deal
with the two data sets. Since the results for the in-silico synthetic
data are easier to interpret, we begin with those data.&lt;/p&gt;
&lt;div id="sec:fast:surrogate:synthetic"&gt;
&lt;h2 id="surrogate-model-for-synthetic-data"&gt;Surrogate model for synthetic data
&lt;/h2&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:fast:state:space"&gt;&lt;/p&gt;
&lt;h3 id="state-space"&gt;State space
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;For the data set from numerical simulation of the AP96 model
(cf. section &lt;a class="link" href="#sec:fast:numerical:simulation" &gt;2.1.2&lt;/a&gt;), the
three-dimensional state space spanned by
${{\bm{{u}}}} = {{{{\left[ u, \tilde u, g \right]}}}^\mathrm{T}}$
is quite sparse. ${95695}$ bins in this space contain
at least one data point, which corresponds to
${9~\mathrm{\%}}$ of all bins. Of these bins,
${40~\mathrm{\%}}$ contain at least 10 data points.
Non-empty bins contain ${230}$ data points on
average.&lt;/p&gt;
&lt;p&gt;In Fig. &lt;a class="link" href="#fig:fast:ap96hiam:hs" &gt;4&lt;/a&gt;, we present a three-dimensional view
of the state space and two different two-dimensional projections of the
state space; to $u$ and $g$, and
to $u$ and $\tilde u$,
respectively. Panel A shows that most data points lay on a loop-like
inertial manifold, while a large volume of the state space is still
covered by data points (panel B). Colouring by the mean of
$\dot
u$, we can see that the two halves of the loop nicely
distinguish between excitation and recovery, see the blue and red shades
in panel C. Note that the colouring of the state space in panel D
corresponds to the SD $\sigma$ and not to the SD
$g$. To be more specific, this panel is coloured by
the SD $\sigma$ of the samples of the time-derivative
$\dot u$ in the bins, instead of the SD
$g$ of the signal $u$ in the
neighbourhoods around each point ${{\bm{{x}}}}$,
which is one of the axes spanning the state space in
Fig. &lt;a class="link" href="#fig:fast:ap96hiam:hs" &gt;4&lt;/a&gt;. In large parts of these projections,
the SD $\sigma$ is much lower than the mean absolute
value of $\dot u$, showing that the model&amp;rsquo;s possible
states are well-separated in the chosen state space
${{\bm{{u}}}}$.&lt;/p&gt;
&lt;div id="fig:fast:ap96hiam:hs"&gt;
&lt;p&gt;&lt;img alt="Visualisation of the three-dimensional state space for the AP96 data set and projections onto two dimensions" class="gallery-image" data-flex-basis="217px" data-flex-grow="90" height="4469" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.hs.png" srcset="https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.hs_hu_cca8e393def190cc.png 800w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.hs_hu_b54e8636c1629f3c.png 1600w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.hs_hu_9e745bd92653627d.png 2400w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.hs.png 4054w" width="4054"&gt;&lt;/p&gt;
&lt;p&gt;Figure 4: &lt;strong&gt;Visualisation of the three-dimensional state space for the
AP96 data set and projections onto two dimensions.&lt;/strong&gt; (A): By colouring
the space by the number $N$ of points in each bin, it
can be seen that most points lay on a loop. (B): Colouring by
$\log_{10}{N}$, we can see that still a large volume
of the space is covered by data. (C): Looking at the mean of
$\dot u$ at each bin in this projection, we can see
that in one side of the loop, $u$ increases while it
decreases at the other side. (D): The standard deviation of
$\dot u$ is indicative of whether the states have
been chosen well.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:fast:model"&gt;&lt;/p&gt;
&lt;h3 id="forward-model"&gt;Forward model
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A model in the context of this work consists of a &amp;ldquo;colouring&amp;rdquo; of the
entire three-dimensional state space representing the
$\dot u$ at each possible state
${{\bm{{u}}}}$.&lt;/p&gt;
&lt;p&gt;The data-driven surrogate model $f$ is fit to the
three-dimensional state space as outlined in
section &lt;a class="link" href="#sec:fast:model:fitting" &gt;2.4&lt;/a&gt; resulting in:
&lt;span &gt;$$
\begin{aligned}
f{\left({{\bm{{u}}}}\right)}
=&amp;
- {0.22407}\, \tilde{u} g u
- {0.82589}\, \tilde{u} g
+ {0.0054601}\, \tilde{u} u
+ {0.021655}\, \tilde{u}
\\&amp;
+ {0.31082}\, g u
+ {0.23077}\, g
- {0.0081478}\, u
- {0.0097110}
\end{aligned}
\qquad{(24)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Subsequently, a forward simulation is performed with the model, leading
to a prediction of $u$ based on the history until
that point which can be compared to the reference evolution of
$u$ in Fig. &lt;a class="link" href="#fig:fast:ap96hiam:comppred" &gt;5&lt;/a&gt;. This
simple model displays excitation and recovery, as well as propagation of
the wave. The predicted evolution is similar to its reference: The
values for the plateau-phase and resting state are close to the
reference values. The depolarisation at the wave front is a bit too
late, leading to predicted values that are too low. Likewise, the
repolarisation at the wave back is too late, such that there the
predicted values are too high.&lt;/p&gt;
&lt;div id="fig:fast:ap96hiam:comppred"&gt;
&lt;p&gt;&lt;img alt="Prediction of the surrogate model over time compared to the reference solution for the AP96 data set" class="gallery-image" data-flex-basis="576px" data-flex-grow="240" height="1742" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.comppred.png" srcset="https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.comppred_hu_e970e3eaaf844709.png 800w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.comppred_hu_883c5c336b101bec.png 1600w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.comppred_hu_3c136f4151d51e67.png 2400w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.comppred.png 4186w" width="4186"&gt;&lt;/p&gt;
&lt;p&gt;Figure 5: &lt;strong&gt;Prediction of the surrogate model over time compared to the
reference solution for the AP96 data set.&lt;/strong&gt; The difference between the
prediction and reference is displayed in the bottom row.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Using the method by Bayly et al. (&lt;a class="link" href="#ref-bayly1998estimation" &gt;1998&lt;/a&gt;), CV
has been measured to be
${(0.1403\ ±\ 0.0036)~\mathrm{{m}{/}{s}}}$ for the
prediction, and
${(0.1621\ ±\ 0.0065)~\mathrm{{m}{/}{s}}}$ for the
reference. This lower propagation velocity leads to the observed delay
of wave front and back.&lt;/p&gt;
&lt;p&gt;We also computed the average APD of the activity in the central 60x60
pixels of the frame with the polarisation threshold of
$u = 0.5$: For the prediction, we measure an APD of
${(56.68\ ±\ 0.48)~\mathrm{{m}{s}}}$, which is
slightly longer than the reference of
${(47.25\ ±\ 0.44)~\mathrm{{m}{s}}}$.&lt;/p&gt;
&lt;p&gt;At the boundary of the domain, the method is still able to compute the
evolution well despite less neighbouring data points being used for the
calculation of the SD $g$.&lt;/p&gt;
&lt;div id="sec:fast:spiral"&gt;
&lt;h3 id="prediction-of-a-spiral-wave"&gt;Prediction of a spiral wave
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Using similar initial conditions for the data-driven surrogate AP96
model and its reference, we have run simulations leading to spiral
waves. In Fig. &lt;a class="link" href="#fig:fast:ap96hiam:spiral" &gt;6&lt;/a&gt;, the resulting evolutions
of $u$ over space and time are juxtaposed. It can be
seen that the overall wave dynamics are similar, despite the data-driven
model only being fit to data from SBP focal waves, i.e., spherical waves
growing from a small source region with different timing and amplitudes.
The surrogate model predicts wave fronts and backs at similar scales as
the reference. The timing of the predicted spiral is also similar to the
reference. However, the prediction differs from the reference in the APD
of the initial rotation, at the rotor core, and in memory effects. Such
a memory effect can clearly be seen in the reference at
$t={150~\mathrm{{m}{s}}}$: The recovery to the
resting state is much faster in the rectangle where the second variable
$v$ of the reference model has been set to a higher
value in the initial state of the simulation. This causes a slightly
different evolution afterwards.&lt;/p&gt;
&lt;div id="fig:fast:ap96hiam:spiral"&gt;
&lt;p&gt;&lt;img alt="Spiral wave resulting from similar initial conditions for the data-driven surrogate model for the AP96 data set compared to its reference model" class="gallery-image" data-flex-basis="784px" data-flex-grow="326" height="1250" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.spiral.png" srcset="https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.spiral_hu_eb7a375df081e877.png 800w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.spiral_hu_cf22830af68d72ed.png 1600w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.spiral_hu_f6cf722b8b97e51e.png 2400w, https://kabus.eu/2024/01/03/kabus2024fast/figures/ap96hiam.spiral.png 4085w" width="4085"&gt;&lt;/p&gt;
&lt;p&gt;Figure 6: &lt;strong&gt;Spiral wave resulting from similar initial conditions for
the data-driven surrogate model for the AP96 data set compared to its
reference model.&lt;/strong&gt; The data-driven model can predict the shape of the
spiral wave despite only focal waves being included in the training data
it is fit to.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:fast:restitution"&gt;&lt;/p&gt;
&lt;h3 id="restitution-curves"&gt;Restitution curves
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;We have also performed one-dimensional cable simulations with the same
stimulation protocol for the data-driven surrogate model compared to the
rescaled AP96 model for reference. In Fig. &lt;a class="link" href="#fig:fast:restitution" &gt;7&lt;/a&gt;,
the resulting restitution curves of CV (panel A) and APD (panel B) as
functions of the CL are shown. The overall shape of the curves for the
low-order surrogate model is similar to the reference. However, the
predicted CVs are lower than the reference values.&lt;/p&gt;
&lt;div id="fig:fast:restitution"&gt;
&lt;p&gt;&lt;img alt="CV and APD restitution curves" class="gallery-image" data-flex-basis="632px" data-flex-grow="263" height="1643" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/01/03/kabus2024fast/figures/restitution.png" srcset="https://kabus.eu/2024/01/03/kabus2024fast/figures/restitution_hu_de74a14d2f592c70.png 800w, https://kabus.eu/2024/01/03/kabus2024fast/figures/restitution_hu_c94a0091c9ddba89.png 1600w, https://kabus.eu/2024/01/03/kabus2024fast/figures/restitution_hu_b36c506aa9521f8f.png 2400w, https://kabus.eu/2024/01/03/kabus2024fast/figures/restitution.png 4328w" width="4328"&gt;&lt;/p&gt;
&lt;p&gt;Figure 7: &lt;strong&gt;CV and APD restitution curves&lt;/strong&gt; for the reference AP96 model
and its data-driven surrogate model.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:fast:optical"&gt;&lt;/p&gt;
&lt;h2 id="data-driven-model-for-optical-mapping-data"&gt;Data-driven model for optical mapping data
&lt;/h2&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:fast:state:space:optical"&gt;&lt;/p&gt;
&lt;h3 id="state-space-1"&gt;State space
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;For the OVM data set of hiAMs (cf. section &lt;a class="link" href="#sec:fast:ovm" &gt;2.1.1&lt;/a&gt;), the
three-dimensional state space spanned by
${{\bm{{u}}}} = {{{{\left[ u, \tilde u, g \right]}}}^\mathrm{T}}$
is also sparse: ${152417}$ bins in this space contain
at least one data point, which corresponds to just
${15~\mathrm{\%}}$ of all bins. Of these bins,
${71~\mathrm{\%}}$ contain at least 10 data points.
Non-empty bins on average contain ${949}$ data
points.&lt;/p&gt;
&lt;p&gt;As can be seen in Fig. &lt;a class="link" href="#fig:fast:optical:hs" &gt;8&lt;/a&gt;, for these data, we are
also observing a loop-like inertial manifold with two halves as in the
other data set.&lt;/p&gt;
&lt;div id="fig:fast:optical:hs"&gt;
&lt;p&gt;&lt;img alt="Visualisation of the three-dimensional state space for the OVM data set" class="gallery-image" data-flex-basis="250px" data-flex-grow="104" height="3881" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.hs.png" srcset="https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.hs_hu_46b1db4f2ba0e851.png 800w, https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.hs_hu_fa744d9eb4d42a7.png 1600w, https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.hs_hu_1fc31e780c0af8c7.png 2400w, https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.hs.png 4054w" width="4054"&gt;&lt;/p&gt;
&lt;p&gt;Figure 8: &lt;strong&gt;Visualisation of the three-dimensional state space for the
OVM data set&lt;/strong&gt; and projections onto two dimensions in the same style as
in Fig. &lt;a class="link" href="#fig:fast:ap96hiam:hs" &gt;4&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:fast:model:optical"&gt;&lt;/p&gt;
&lt;h3 id="forward-model-1"&gt;Forward model
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;For the OVM data set, the fit polynomial for the data-driven model is:
&lt;span &gt;$$
\begin{aligned}
f{\left({{\bm{{u}}}}\right)}
=&amp;
- {0.41392}\, \tilde{u} g u
- {0.31842}\, \tilde{u} g
+ {0.026308}\, \tilde{u} u
+ {0.0010949}\, \tilde{u}
\\&amp;
+ {0.19341}\, g u
+ {0.15352}\, g
- {0.014174}\, u
- {0.0044818}
\end{aligned}
\qquad{(25)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The prediction by the forward model for the OVM data set is depicted in
Fig. &lt;a class="link" href="#fig:fast:optical:comppred" &gt;9&lt;/a&gt;. It models the overall behaviour of
the tissue, i.e., excitation, recovery, and wave propagation, at similar
time scales: The APD for an excitation threshold of
$u=0.5$ of
${(140.1\ ±\ 5.1)~\mathrm{{m}{s}}}$ for the
prediction is longer than the APD of
${(127\ ±\ 36)~\mathrm{{m}{s}}}$ measured for the
reference. The CV for the prediction is measured at
${(0.148\ ±\ 0.012)~\mathrm{{m}{/}{s}}}$, and at
${(0.21\ ±\ 0.13)~\mathrm{{m}{/}{s}}}$ for the
reference. The large uncertainty in the APD and CV measurements for the
reference data is due to small regions of inhomogeneity in the
recording. Due to the uncertainty and disparity in APD and CV values
between prediction and reference, no reliable restitution curves can
been measured for this model.&lt;/p&gt;
&lt;div id="fig:fast:optical:comppred"&gt;
&lt;p&gt;&lt;img alt="Prediction of the data-driven model over time compared to the reference solution for the OVM data set" class="gallery-image" data-flex-basis="576px" data-flex-grow="240" height="1742" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.comppred.png" srcset="https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.comppred_hu_824a7ae0804cdddb.png 800w, https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.comppred_hu_18aeb59543620493.png 1600w, https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.comppred_hu_70bb152ca482ad59.png 2400w, https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.comppred.png 4186w" width="4186"&gt;&lt;/p&gt;
&lt;p&gt;Figure 9: &lt;strong&gt;Prediction of the data-driven model over time compared to
the reference solution for the OVM data set.&lt;/strong&gt; The difference between
the prediction and reference is displayed in the bottom row.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;It can be seen that such artefacts due to inhomogeneity in the monolayer
and other more complex effects are difficult to predict for the model,
which only gets the state
${{\bm{{u}}}}{{\left( t_0, {{\bm{{x}}}} \right)}}$ at
the initial time as input. Yet, similar structures are found in the
prediction.&lt;/p&gt;
&lt;p&gt;For the OVM data, the repolarisation at the wave back is much slower
than the depolarisation at the wave front. For the synthetic data set
AP96 re- and depolarisation happen at roughly the same time scale.
Still, the one EMA variable $\tilde u$ is enough to
capture these processes in both cases.&lt;/p&gt;
&lt;div id="sec:fast:spiral:optical"&gt;
&lt;h3 id="prediction-of-a-spiral-wave-1"&gt;Prediction of a spiral wave
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;In Fig. &lt;a class="link" href="#fig:fast:optical:spiral" &gt;10&lt;/a&gt;, we compare a rotor in another
OVM recording of hiAMs and a rotor predicted by the in-silico
data-driven model. The model has been fit to data from only focal waves.
To stimulate a spiral wave, we use the rectangle-based initial
conditions outlined in section &lt;a class="link" href="#sec:fast:numerical:simulation" &gt;2.1.2&lt;/a&gt;.
Like for the synthetic data set (AP96,
section &lt;a class="link" href="#sec:fast:surrogate:synthetic" &gt;3.1&lt;/a&gt;), the tissue model is able
to predict the overall spiral dynamics. Note that the spiral wave in the
OVM recording has stabilised for several minutes before
$t={0~\mathrm{{m}{s}}}$, while the rotor is just
forming in the simulation with the data-driven model. The APD predicted
by the model is much longer than the one observed APD by OVM. This leads
to the wave front running into the wave back in the simulation.&lt;/p&gt;
&lt;div id="fig:fast:optical:spiral"&gt;
&lt;p&gt;&lt;img alt="Comparison of a spiral wave for the data-driven model for the OVM data set for hiAMs to a OVM recording of hiAMs showing a stable rotor" class="gallery-image" data-flex-basis="784px" data-flex-grow="326" height="1250" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.spiral.png" srcset="https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.spiral_hu_dca48dd5f588019b.png 800w, https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.spiral_hu_4e3f048541a2552d.png 1600w, https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.spiral_hu_9f07a6184775e67a.png 2400w, https://kabus.eu/2024/01/03/kabus2024fast/figures/optical.spiral.png 4085w" width="4085"&gt;&lt;/p&gt;
&lt;p&gt;Figure 10: &lt;strong&gt;Comparison of a spiral wave for the data-driven model for
the OVM data set for hiAMs to a OVM recording of hiAMs showing a stable
rotor.&lt;/strong&gt; The data-driven model can predict the overall dynamics of the
spiral wave despite only focal waves being included in the training data
it is fit to.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:fast:discussion"&gt;&lt;/p&gt;
&lt;h1 id="discussion"&gt;Discussion
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;In this paper, we have shown that enough information can be extracted
from just one spatio-temporal variable to build a state space, which
enables the creation of in-silico models that can predict the further
dynamics of the system. In layman&amp;rsquo;s terms, from a single movie showing
the behaviour of excitation and recovery, a predictive model can be
constructed. Just the information from OVM is already enough to fit a
data-driven model to the dynamics. With our approach, it is even
possible to fit a stable model to a single excitation wave, which, in
turn, does not generalise well to other waves. For this reason, the SBP
protocol is designed to ensure that less likely stimulation patterns are
observed in the data, too. The resulting models are able to replicate
the excitation patterns of focal waves included in the training data and
can even predict the dynamics of spiral waves, a pattern that the models
are not trained on.&lt;/p&gt;
&lt;p&gt;While the variables with which we augment the state space should be seen
as preliminary and not optimal choices, the models created with these
variables already are able to capture crucial behaviour of the tissue,
namely excitation, recovery and wave propagation. Both short and
long-term memory can be encoded with the use of EMAs as state variables,
which can easily be updated on the fly (Eq. &lt;a class="link" href="#eq:fast:ema" &gt;7&lt;/a&gt;). It
remains to be seen if more or other state space augmentations can be
used to be able to replicate higher-order effects, such as wave front
curvature and to obtain more accurate restitution behaviour.&lt;/p&gt;
&lt;p&gt;Through state space expansion with EMAs and SDs, we have found a way to
encode useful information to describe the mechanics of excitation waves.
It is remarkable, that, after &amp;ldquo;unfolding&amp;rdquo; with the proper state space
expansion, we are able to capture with simple polynomial regression the
kinetics of excitation waves sufficiently in the sense that we observe
excitation and recovery with an APD similar to the data, and wave
propagation at a similar CV.&lt;/p&gt;
&lt;p&gt;The polynomial model $f$ is fit using a basic
supervised machine learning method. However, this is just a small part
of the method presented in this work. We have shown that using
unsupervised learning, i.e., data transformations, much insight can be
gained about the structure of the data. The insights obtained from
presenting the data sets in the chosen three-dimensional state spaces as
done in this work make it almost trivial to fit the data-driven model to
the data. Fitting a function in the chosen state space is easier to
interpret than black box approaches common in machine learning.&lt;/p&gt;
&lt;p&gt;We have chosen to use an advection-based description of the wave
propagation. This is due to the computation of the diffusion term
$\nabla \cdot {{\bm{{D}}}}
\nabla u$ in Eq. &lt;a class="link" href="#eq:fast:reactdiff" &gt;12&lt;/a&gt; being quite
sensitive to small variations in $u$ and hence less
robust to noisy data. The absolute gradient
${{\left\lVert \nabla u \right\rVert}}$ as
approximated using the SD $g$ can deal with noise
much better by design. Solving the forward equations in the
advection-regression framework requires less computational effort in
forward simulations than most traditional in-silico models and other
novel approaches utilising convolutional and physics-informed neural
networks. In the numerical solution of reaction-diffusion systems
(Eq. &lt;a class="link" href="#eq:fast:reactdiff" &gt;12&lt;/a&gt;), a sufficiently small numerical time step
must be chosen according to a stability criterion. Typically, this leads
to numerical time steps of the order of magnitude in two-dimensional
simulations of in-silico tissue models of cardiac electrophysiology.
Forward Euler stepping our model in the advection-regression framework
can be done at much larger time steps of up to with the trade-off of
fitting less to the original data. Also the computation of the
polynomial $f$, EMAs and SDs result in an overall
computationally cheaper model than typical tissue models.&lt;/p&gt;
&lt;p&gt;While this was not needed for this use case, in further research, more
sophisticated general function approximators may be tried for
$f$, such as neural networks. Although the Latin
hypercube sampling enables some basic regularisation of the solution, it
remains to be seen how to keep the fit functions simple enough such that
they generalise well. Another limitation that could be addressed when
using more flexible function approximators is that, in some cases, the
polynomial model $f$ updates the state
$u$ such that it tries to leave the valid range.&lt;/p&gt;
&lt;p&gt;While other augmentations were tried in the development of this method,
such as pseudo-electrograms, the last APD and diastolic interval at each
point over time, or the absolute value of the gradient fit to a
neighbourhood of each point using the least-squares method, we are here
presenting two augmentations we found most useful, the EMA
$\tilde u$ as well as the SD $g$.&lt;/p&gt;
&lt;p&gt;We have not yet taken into account boundary effects in the model
creation procedure. Some information about the gradient of the main
variable $u$ is encoded in the SD
$g$ in the neighbourhood of each point in the medium.
The SD $g$ can still be computed near the boundary by
treating those points just like interior points but with fewer samples.
How to encode boundary conditions in this model could be investigated in
follow-up studies.&lt;/p&gt;
&lt;p&gt;The procedure to generate in-silico tissue models is designed to work
well in a setting where not much is known about the wave propagation in
an in-vitro tissue model. Our method only requires very little
assumptions to uncover the dynamics. Fitting is not limited to just
in-vitro OVM data of focal waves in cardiac tissue excitation models,
but can also be done in general where excitation wave dynamics can be
observed in two dimensional space over time. An advantage of our method
is that models for any observed behaviour can be created and fit to data
which is in contrast to classical phenomenological models (&lt;a class="link" href="#ref-aliev1996simple" &gt;Aliev &amp;amp;
Panfilov, 1996&lt;/a&gt;; &lt;a class="link" href="#ref-barkley1991model" &gt;Barkley,
1991&lt;/a&gt;; &lt;a class="link" href="#ref-bueno2008model" &gt;Bueno-Orovio et al.,
2008&lt;/a&gt;; &lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma,
1998&lt;/a&gt;; &lt;a class="link" href="#ref-fitzhugh1961impulses" &gt;FitzHugh,
1961&lt;/a&gt;; &lt;a class="link" href="#ref-marcotte2017dynamical" &gt;Marcotte &amp;amp; Grigoriev,
2017&lt;/a&gt;; &lt;a class="link" href="#ref-nagumo1962active" &gt;Nagumo et al.,
1962&lt;/a&gt;). Fitting parameters of such existing
models can get the model closer to observed data. However, if a
behaviour falls outside the regime of these models, such methods will
not work (&lt;a class="link" href="#ref-herreromartin2022eppinns" &gt;Martin et al., 2022&lt;/a&gt;). With
our method, a data-driven model can be fit flexibly with relative ease
within minutes and subsequently used to predict the further evolution of
the tissue. This puts our model creation pipeline more in line with
recent deep learning approaches (&lt;a class="link" href="#ref-sahlicostabal2020eikonalpinns" &gt;Costabal et al.,
2020&lt;/a&gt;; &lt;a class="link" href="#ref-herreromartin2022eppinns" &gt;Martin et al.,
2022&lt;/a&gt;; &lt;a class="link" href="#ref-shahi2022machine" &gt;Shahi et al.,
2022&lt;/a&gt;). However, our approach is typically faster
in fitting due to the polynomial model function and faster in forward
stepping because of the SD-based spatial coupling. Depending on the
complexity of the dynamics, a simple approach to modelling such as ours
may be enough. Promising use cases to apply the proposed method with
minimal changes are the peristaltic motion of for instance embryonic
hearts or the digestive tract (&lt;a class="link" href="#ref-moorman2003cardiac" &gt;Moorman &amp;amp; Christoffels,
2003&lt;/a&gt;), or the spread of lichens which has been
observed to form spiral waves (&lt;a class="link" href="#ref-muller2019appearance" &gt;Müller &amp;amp; Tsuji,
2019&lt;/a&gt;). For more complex dynamics, more than
three state space variables may be needed, or an extension using a
neural network as the model function $f$. For very
complex dynamics, the aforementioned, more extensive deep learning
methods may be necessary (&lt;a class="link" href="#ref-aliev1996simple" &gt;Aliev &amp;amp; Panfilov,
1996&lt;/a&gt;; &lt;a class="link" href="#ref-barkley1991model" &gt;Barkley, 1991&lt;/a&gt;;
&lt;a class="link" href="#ref-bueno2008model" &gt;Bueno-Orovio et al., 2008&lt;/a&gt;; &lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma,
1998&lt;/a&gt;; &lt;a class="link" href="#ref-fitzhugh1961impulses" &gt;FitzHugh,
1961&lt;/a&gt;; &lt;a class="link" href="#ref-marcotte2017dynamical" &gt;Marcotte &amp;amp; Grigoriev,
2017&lt;/a&gt;; &lt;a class="link" href="#ref-nagumo1962active" &gt;Nagumo et al.,
1962&lt;/a&gt;). Possible extensions of our data-driven
model include an online-learning approach, where the model&amp;rsquo;s predictive
power is continuously improved while new data comes in. Such a model
could, for instance, be fit to patient recordings, such as intra-cardiac
electrograms or electrocardiograms on the body surface, and then be used
to predict cardiac arrhythmias before they happen.&lt;/p&gt;
&lt;div id="sec:fast:conclusion"&gt;
&lt;h1 id="conclusion"&gt;Conclusion
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;In this work, we presented a method to create simple data-driven
in-silico tissue models from in-vitro OVM data and synthetic data that
capture the basic behaviour of the corresponding excitable media. These
models can predict the activation patterns included in the training
data, i.e., only focal waves, and generalise to unseen activation
patterns, such as spiral waves. A useful feature of this model creation
method is its ability to extract all relevant information that the
models are fit to from just one state variable over space and time, such
as the transmembrane voltage of cardiomyocytes which can be obtained
from a single experiment, e.g. an OVM recording.&lt;/p&gt;
&lt;div id="sec:fast:data:availability"&gt;
&lt;h1 id="data-availability"&gt;Data availability
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The source code of the software implemented for this paper is publicly
available at &lt;a class="link" href="https://gitlab.com/heartkor" target="_blank" rel="noopener"
 &gt;https://gitlab.com/heartkor&lt;/a&gt;. The functionality is broken
up into several separate packages, some of which depend on each other.&lt;/p&gt;
&lt;p&gt;The model creation pipeline is implemented as the Distephym Python
module, &lt;a class="link" href="https://gitlab.com/heartkor/distephym" target="_blank" rel="noopener"
 &gt;&lt;code&gt;distephym&lt;/code&gt; 1.0.0&lt;/a&gt;. It
stores the augmented state spaces in sparse histograms, specifically
implemented for this publication as another module,
&lt;a class="link" href="https://gitlab.com/heartkor/python-sparsealgos" target="_blank" rel="noopener"
 &gt;&lt;code&gt;sparsealgos&lt;/code&gt; 1.0.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Reading, writing, and analysis of OVM recordings is implemented in the
Sappho Python module,
&lt;a class="link" href="https://gitlab.com/heartkor/sappho" target="_blank" rel="noopener"
 &gt;&lt;code&gt;sappho&lt;/code&gt; 1.0.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Ithildin C++ framework,
&lt;a class="link" href="https://gitlab.com/heartkor/ithildin" target="_blank" rel="noopener"
 &gt;&lt;code&gt;ithildin&lt;/code&gt; 3.2.2&lt;/a&gt;, is a
finite-differences, parallelised, reaction-diffusion solver written in
C++. It will be released in a separate, dedicated publication (&lt;a class="link" href="#ref-cloet2023scroll" &gt;Cloet et
al., 2023&lt;/a&gt;; &lt;a class="link" href="#ref-kabus2024ithildin" &gt;Kabus et al.,
2024&lt;/a&gt;). We have used Ithildin to generate the
synthetic (i.e., AP96) data set.&lt;/p&gt;
&lt;p&gt;For the other forward simulations in this work, we have written another
simple finite-differences reaction-diffusion solver in Python,
&lt;a class="link" href="https://gitlab.com/heartkor/ithilmin" target="_blank" rel="noopener"
 &gt;&lt;code&gt;ithilmin&lt;/code&gt; 1.0.0&lt;/a&gt;, that can
easily be combined with other Python modules. It was used for forward
runs of the fit data-driven models.&lt;/p&gt;
&lt;p&gt;In conjunction with this paper, we are also releasing a new version of
the Ithildin Python module,
&lt;a class="link" href="https://gitlab.com/heartkor/py_ithildin" target="_blank" rel="noopener"
 &gt;&lt;code&gt;py_ithildin&lt;/code&gt; 0.6.1&lt;/a&gt;, (&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus
et al., 2022&lt;/a&gt;). This module was used for the
processing of in-vitro/in-silico data sets. Results from both
reaction-diffusion solvers, &lt;code&gt;ithildin&lt;/code&gt; and &lt;code&gt;ithilmin&lt;/code&gt;, can be analysed
with this Python module.&lt;/p&gt;
&lt;p&gt;The source code of these projects and the AP96 and OVM data sets used in
this work have been archived on Zenodo
(&lt;a class="link" href="https://doi.org/10.5281%2Fzenodo.8183722" target="_blank" rel="noopener"
 &gt;DOI: 10.5281/zenodo.8183722&lt;/a&gt;).&lt;/p&gt;
&lt;div &gt;
&lt;h1 id="addenda"&gt;Addenda
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Acknowledgments:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are grateful to our collaborators at the LUMC, especially to Sven O.
Dekker and Juan Zhang for providing access to hiAM monolayers and the
OVM setup, and to Niels Harlaar for the spiral wave OVM recordings,
respectively. Also, we would like to thank all members of Team HeartKOR
at KULAK for valuable help during writing, in particular, Marie Cloet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Funding:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DK is supported by KU Leuven grant GPUL/20/012. HD is supported by KU
Leuven grant STG/19/007. The funders had no role in study design, data
collection and analysis, decision to publish, or preparation of the
manuscript. The hiAMs were developed as part of the research programme
&amp;ldquo;More Knowledge with Fewer Animals&amp;rdquo; (MKMD, project 114022503, to AAFdV),
which was financed by the Netherlands Organisation for Health Research
and Development (ZonMw) and by the Dutch Society for the Replacement of
Animal Testing (dsRAT).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Competing interests:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The authors have declared that no competing interests exist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Copyright:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;© 2024 The Authors. Published by Elsevier Ltd. This is an open access
article under the CC BY license
(&lt;a class="link" href="http://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noopener"
 &gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Author contributions:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DK:&lt;/strong&gt;
Conceptualisation, Methodology, Software, Validation, Formal analysis, Investigation, Data curation, Writing &amp;ndash; original draft, Writing &amp;ndash; review &amp;amp; editing, Visualisation. &lt;strong&gt;TDC:&lt;/strong&gt;
Methodology, Writing &amp;ndash; review &amp;amp; editing. &lt;strong&gt;AAFdV:&lt;/strong&gt;
Conceptualisation, Resources, Writing &amp;ndash; review &amp;amp; editing. &lt;strong&gt;DAP:&lt;/strong&gt;
Conceptualisation, Resources, Writing &amp;ndash; review &amp;amp; editing, Supervision, Project administration, Funding acquisition. &lt;strong&gt;HD:&lt;/strong&gt;
Conceptualisation, Resources, Writing &amp;ndash; review &amp;amp; editing, Supervision, Project administration, Funding acquisition.
&lt;div &gt;&lt;/p&gt;
&lt;h1 id="references"&gt;References
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="refs" class="references csl-bib-body hanging-indent" entry-spacing="0" line-spacing="2"&gt;
&lt;div id="ref-aliev1996simple" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Aliev, R. R., &amp;amp; Panfilov, A. V. (1996). A simple two-variable model of
cardiac excitation. &lt;em&gt;Chaos, Solitons &amp;amp; Fractals&lt;/em&gt;, &lt;em&gt;7&lt;/em&gt;(3), 293&amp;ndash;301.
&lt;a class="link" href="https://doi.org/10.1016/0960-0779%2895%2900089-5" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0960-0779(95)00089-5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-barkley1991model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Barkley, D. (1991). A model for fast computer simulation of waves in
excitable media. &lt;em&gt;Physica D: Nonlinear Phenomena&lt;/em&gt;, &lt;em&gt;49&lt;/em&gt;(1-2), 61&amp;ndash;70.
&lt;a class="link" href="https://doi.org/10.1016/0167-2789%2891%2990194-e" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0167-2789(91)90194-e&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bayly1998estimation" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bayly, P. V., KenKnight, B. H., Rogers, J. M., Hillsley, R. E., Ideker,
R. E., &amp;amp; Smith, W. M. (1998). Estimation of conduction velocity vector
fields from epicardial mapping data. &lt;em&gt;IEEE Transactions on Biomedical
Engineering&lt;/em&gt;, &lt;em&gt;45&lt;/em&gt;(5), 563&amp;ndash;571. &lt;a class="link" href="https://doi.org/10.1109/10.668746" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/10.668746&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bressloff2014waves" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bressloff, P. C. (2014). Waves in neural media. &lt;em&gt;Lecture Notes on
Mathematical Modelling in the Life Sciences&lt;/em&gt;, 18&amp;ndash;19.
&lt;a class="link" href="https://doi.org/10.1007/978-1-4614-8866-8" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/978-1-4614-8866-8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bueno2008model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bueno-Orovio, A., Cherry, E. M., &amp;amp; Fenton, F. H. (2008). Minimal model
for human ventricular action potentials in tissue. &lt;em&gt;Journal of
Theoretical Biology&lt;/em&gt;, &lt;em&gt;253&lt;/em&gt;(3), 544&amp;ndash;560.
&lt;a class="link" href="https://doi.org/10.1016/j.jtbi.2008.03.029" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jtbi.2008.03.029&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clayton2011review" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clayton, R., Bernus, O., Cherry, E. M., Dierckx, H., Fenton, F. H.,
Mirabella, L., Panfilov, A. V., Sachse, F. B., Seemann, G., &amp;amp; Zhang, H.
(2011). Models of cardiac tissue electrophysiology: Progress, challenges
and open questions. &lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;,
&lt;em&gt;104&lt;/em&gt;(1-3), 22&amp;ndash;48. &lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2010.05.008" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2010.05.008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-cloet2023scroll" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Cloet, M., Arno, L., Kabus, D., Van der Veken, J., Panfilov, A. V., &amp;amp;
Dierckx, H. (2023). Scroll waves and filaments in excitable media of
higher spatial dimension. &lt;em&gt;Physical Review Letters&lt;/em&gt;, &lt;em&gt;131&lt;/em&gt;(20), 208401.
&lt;a class="link" href="https://doi.org/10.1103/PhysRevLett.131.208401" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevLett.131.208401&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-sahlicostabal2020eikonalpinns" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Costabal, F. S., Yang, Y., Perdikaris, P., Hurtado, D. E., &amp;amp; Kuhl, E.
(2020). Physics-informed neural networks for cardiac activation mapping.
&lt;em&gt;Frontiers in Physics&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;. &lt;a class="link" href="https://doi.org/10.3389/fphy.2020.00042" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fphy.2020.00042&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-courtemanche1998ionic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Courtemanche, M., Ramirez, R. J., &amp;amp; Nattel, S. (1998). Ionic mechanisms
underlying human atrial action potential properties: Insights from a
mathematical model. &lt;em&gt;American Journal of Physiology-Heart and
Circulatory Physiology&lt;/em&gt;, &lt;em&gt;275&lt;/em&gt;(1), H301&amp;ndash;H321.
&lt;a class="link" href="https://doi.org/10.1152/ajpheart.1998.275.1.H301" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.1998.275.1.H301&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fenton1998vortex" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Fenton, F. H., &amp;amp; Karma, A. (1998). Vortex dynamics in three-dimensional
continuous myocardium with fiber rotation: Filament instability and
fibrillation. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;(1), 20&amp;ndash;47. &lt;a class="link" href="https://doi.org/10.1063/1.166311" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166311&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fitzhugh1961impulses" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;FitzHugh, R. (1961). Impulses and physiological states in theoretical
models of nerve membrane. &lt;em&gt;Biophysical Journal&lt;/em&gt;, &lt;em&gt;1&lt;/em&gt;(6), 445&amp;ndash;466.
&lt;a class="link" href="https://doi.org/10.1016/s0006-3495%2861%2986902-6" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/s0006-3495(61)86902-6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fox2002period" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Fox, J. J., Bodenschatz, E., &amp;amp; Gilmour, R. F. (2002). Period-doubling
instability and memory in cardiac tissue. &lt;em&gt;Physical Review Letters&lt;/em&gt;,
&lt;em&gt;89&lt;/em&gt;(13). &lt;a class="link" href="https://doi.org/10.1103/physrevlett.89.138101" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/physrevlett.89.138101&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gillette2021framework" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gillette, K., Gsell, M. A. F., Prassl, A. J., Karabelas, E., Reiter, U.,
Reiter, G., Grandits, T., Payer, C., Štern, D., Urschler, M., Bayer, J.
D., Augustin, C. M., Neic, A., Pock, T., Vigmond, E. J., &amp;amp; Plank, G.
(2021). A framework for the generation of digital twins of cardiac
electrophysiology from clinical 12-leads
&lt;span &gt;ECGs&lt;/span&gt;. &lt;em&gt;Medical Image
Analysis&lt;/em&gt;, &lt;em&gt;71&lt;/em&gt;, 102080. &lt;a class="link" href="https://doi.org/10.1016/j.media.2021.102080" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.media.2021.102080&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gray1995mechanisms" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gray, R. A., Jalife, J., Panfilov, A. V., Baxter, W. T., Cabo, C.,
Davidenko, J. M., &amp;amp; Pertsov, A. M. (1995). Mechanisms of cardiac
fibrillation. &lt;em&gt;Science&lt;/em&gt;, &lt;em&gt;270&lt;/em&gt;(5239), 1222&amp;ndash;1223.
&lt;a class="link" href="https://doi.org/10.1126/science.270.5239.1222" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1126/science.270.5239.1222&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-harlaar2022hiam" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Harlaar, N., Dekker, S. O., Zhang, J., Snabel, R. R., Veldkamp, M. W.,
Verkerk, A. O., Fabres, C. C., Schwach, V., Lerink, L. J. S., Rivaud, M.
R., Mulder, A. A., Corver, W. E., Goumans, M. J. T. H., Dobrev, D.,
Klautz, R. J. M., Schalij, M. J., Veenstra, G. J. C., Passier, R.,
Brakel, T. J. van, Pijnappels, D. A., &amp;amp; Vries, A. A. F. de. (2022).
Conditional immortalization of human atrial myocytes for the generation
of in vitro models of atrial fibrillation. &lt;em&gt;Nature Biomedical
Engineering&lt;/em&gt;, &lt;em&gt;6&lt;/em&gt;(4), 389&amp;ndash;402.
&lt;a class="link" href="https://doi.org/10.1038/s41551-021-00827-5" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41551-021-00827-5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-joukar2021comparative" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Joukar, S. (2021). A comparative review on heart ion channels, action
potentials and electrocardiogram in rodents and human: Extrapolation of
experimental insights to clinic. &lt;em&gt;Laboratory Animal Research&lt;/em&gt;, &lt;em&gt;37&lt;/em&gt;(1),
1&amp;ndash;15. &lt;a class="link" href="https://doi.org/10.1186/s42826-021-00102-3" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1186/s42826-021-00102-3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2022numerical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Arno, L., Leenknegt, L., Panfilov, A. V., &amp;amp; Dierckx, H.
(2022). Numerical methods for the detection of phase defect structures
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;(7), 1&amp;ndash;31.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0271351" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0271351&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2024ithildin" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Cloet, M., Zemlin, C., Bernus, O., &amp;amp; Dierckx, H. (2024). The
&lt;span &gt;Ithildin&lt;/span&gt; library for
efficient numerical solution of anisotropic reaction-diffusion problems
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;19&lt;/em&gt;(9), 1&amp;ndash;26.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0303674" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0303674&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kroghmadsen2005ionic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Krogh-Madsen, T., Schaffer, P., Skriver, A. D., Taylor, L. K., Pelzmann,
B., Koidl, B., &amp;amp; Guevara, M. R. (2005). An ionic model for rhythmic
activity in small clusters of embryonic chick ventricular cells.
&lt;em&gt;American Journal of Physiology-Heart and Circulatory Physiology&lt;/em&gt;,
&lt;em&gt;289&lt;/em&gt;(1), H398&amp;ndash;H413. &lt;a class="link" href="https://doi.org/10.1152/ajpheart.00683.2004" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.00683.2004&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kuklik2014reconstruction" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kuklik, P., Zeemering, S., Maesen, B., Maessen, J., Crijns, H. J.,
Verheule, S., Ganesan, A. N., &amp;amp; Schotten, U. (2014). Reconstruction of
instantaneous phase of unipolar atrial contact electrogram using a
concept of sinusoidal recomposition and hilbert transform. &lt;em&gt;IEEE
Transactions on Biomedical Engineering&lt;/em&gt;, &lt;em&gt;62&lt;/em&gt;(1), 296&amp;ndash;302.
&lt;a class="link" href="https://doi.org/10.1109/TBME.2014.2350029" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/TBME.2014.2350029&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-majumder2016model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Majumder, R., Jangsangthong, W., Feola, I., Ypey, D. L., Pijnappels, D.
A., &amp;amp; Panfilov, A. V. (2016). A mathematical model of neonatal rat
atrial monolayers with constitutively active acetylcholine-mediated k+
current. &lt;em&gt;PLoS Computational Biology&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(6), e1004946.
&lt;a class="link" href="https://doi.org/10.1371/journal.pcbi.1004946" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pcbi.1004946&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-marcotte2017dynamical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Marcotte, C. D., &amp;amp; Grigoriev, R. O. (2017). Dynamical mechanism of
atrial fibrillation: A topological approach. &lt;em&gt;Chaos: An
Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;27&lt;/em&gt;(9).
&lt;a class="link" href="https://doi.org/10.1063/1.5003259" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.5003259&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-herreromartin2022eppinns" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Martin, C. H., Oved, A., Chowdhury, R. A., Ullmann, E., Peters, N. S.,
Bharath, A. A., &amp;amp; Varela, M. (2022).
&lt;span &gt;EP&lt;/span&gt;-&lt;span &gt;PINNs&lt;/span&gt;:
Cardiac electrophysiology characterisation using physics-informed neural
networks. &lt;em&gt;Frontiers in Cardiovascular Medicine&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.3389/fcvm.2021.768419" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fcvm.2021.768419&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-mckay2000comparison" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;McKay, M. D., Beckman, R. J., &amp;amp; Conover, W. J. (2000). A comparison of
three methods for selecting values of input variables in the analysis of
output from a computer code. &lt;em&gt;Technometrics&lt;/em&gt;, &lt;em&gt;42&lt;/em&gt;(1), 55&amp;ndash;61.
&lt;a class="link" href="https://doi.org/10.1080/00401706.2000.10485979" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1080/00401706.2000.10485979&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-moe1964computer" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Moe, G. K., Rheinbolt, W. C., &amp;amp; Abildskov, J. A. (1964). A computer
model of atrial fibrillation. &lt;em&gt;Am. Heart J.&lt;/em&gt;, &lt;em&gt;67&lt;/em&gt;, 200&amp;ndash;220.
&lt;a class="link" href="https://doi.org/10.1016/0002-8703%2864%2990371-0" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0002-8703(64)90371-0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-moorman2003cardiac" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Moorman, A. F. M., &amp;amp; Christoffels, V. M. (2003). Cardiac chamber
formation: Development, genes, and evolution. &lt;em&gt;Physiological Reviews&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.1152/physrev.00006.2003" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/physrev.00006.2003&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-muller2019appearance" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Müller, S. C., &amp;amp; Tsuji, K. (2019). Appearance in nature. &lt;em&gt;Spirals and
Vortices: In Culture, Nature, and Science&lt;/em&gt;, 31&amp;ndash;66.
&lt;a class="link" href="https://doi.org/10.1007/978-3-030-05798-5_2" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/978-3-030-05798-5_2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-nagumo1962active" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Nagumo, J., Arimoto, S., &amp;amp; Yoshizawa, S. (1962). An active pulse
transmission line simulating nerve axon. &lt;em&gt;Proceedings of the
&lt;span &gt;IRE&lt;/span&gt;&lt;/em&gt;, &lt;em&gt;50&lt;/em&gt;(10),
2061&amp;ndash;2070. &lt;a class="link" href="https://doi.org/10.1109/jrproc.1962.288235" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/jrproc.1962.288235&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-niederer2019computational" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Niederer, S. A., Lumens, J., &amp;amp; Trayanova, N. A. (2019). Computational
models in cardiology. &lt;em&gt;Nature Reviews Cardiology&lt;/em&gt;, &lt;em&gt;16&lt;/em&gt;(2), 100&amp;ndash;111.
&lt;a class="link" href="https://doi.org/10.1038/s41569-018-0104-y" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41569-018-0104-y&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-noble1974geographic" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Noble, J. V. (1974). Geographic and temporal development of plagues.
&lt;em&gt;Nature&lt;/em&gt;, &lt;em&gt;250&lt;/em&gt;(5469), 726&amp;ndash;729. &lt;a class="link" href="https://doi.org/10.1038/250726a0" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/250726a0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-ohara2012quantitative" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;O&amp;rsquo;Hara, T., &amp;amp; Rudy, Y. (2012). Quantitative comparison of cardiac
ventricular myocyte electrophysiology and response to drugs in human and
nonhuman species. &lt;em&gt;American Journal of Physiology-Heart and Circulatory
Physiology&lt;/em&gt;, &lt;em&gt;302&lt;/em&gt;(5), H1023&amp;ndash;H1030.
&lt;a class="link" href="https://doi.org/10.1152/ajpheart.00785.2011" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.00785.2011&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-paci2013model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Paci, M., Hyttinen, J., Aalto-Setälä, K., &amp;amp; Severi, S. (2013).
Computational models of ventricular-and atrial-like human induced
pluripotent stem cell derived cardiomyocytes. &lt;em&gt;Annals of Biomedical
Engineering&lt;/em&gt;, &lt;em&gt;41&lt;/em&gt;(11), 2334&amp;ndash;2348.
&lt;a class="link" href="https://doi.org/10.1007/s10439-013-0833-3" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/s10439-013-0833-3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-priebe1998simulation" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Priebe, L., &amp;amp; Beuckelmann, D. J. (1998). Simulation study of cellular
electric properties in heart failure. &lt;em&gt;Circulation Research&lt;/em&gt;, &lt;em&gt;82&lt;/em&gt;(11),
1206&amp;ndash;1223. &lt;a class="link" href="https://doi.org/10.1161/01.res.82.11.1206" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.res.82.11.1206&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-shahi2022machine" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Shahi, S., Fenton, F. H., &amp;amp; Cherry, E. M. (2022). A machine-learning
approach for long-term prediction of experimental cardiac action
potential time series using an autoencoder and echo state networks.
&lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;32&lt;/em&gt;(6).
&lt;a class="link" href="https://doi.org/10.1063/5.0087812" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/5.0087812&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-tentusscher2004model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;ten Tusscher, K. H. W. J., Noble, D., Noble, P.-J., &amp;amp; Panfilov, A. V.
(2004). A model for human ventricular tissue. &lt;em&gt;American Journal of
Physiology-Heart and Circulatory Physiology&lt;/em&gt;, &lt;em&gt;286&lt;/em&gt;(4), H1573&amp;ndash;H1589.
&lt;a class="link" href="https://doi.org/10.1152/ajpheart.00794.2003" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1152/ajpheart.00794.2003&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-trayanova2020how" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Trayanova, N. A., Doshi, A. N., &amp;amp; Prakosa, A. (2020). How personalized
heart modeling can help treatment of lethal arrhythmias:
&lt;span &gt;A&lt;/span&gt; focus on
ventricular tachycardia ablation strategies in post‐infarction patients.
&lt;em&gt;WIREs Systems Biology and Medicine&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;(3).
&lt;a class="link" href="https://doi.org/10.1002/wsbm.1477" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1002/wsbm.1477&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-wei2015role" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Wei, N., Mori, Y., &amp;amp; Tolkacheva, E. G. (2015). The role of short term
memory and conduction velocity restitution in alternans formation.
&lt;em&gt;Journal of Theoretical Biology&lt;/em&gt;, &lt;em&gt;367&lt;/em&gt;, 21&amp;ndash;28.
&lt;a class="link" href="https://doi.org/10.1016/j.jtbi.2014.11.014" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jtbi.2014.11.014&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;</description></item><item><title>Calendar of travel photos 2023</title><link>https://kabus.eu/2023/12/03/calendar/</link><pubDate>Sun, 03 Dec 2023 15:03:22 +0100</pubDate><guid>https://kabus.eu/2023/12/03/calendar/</guid><description>&lt;img src="https://kabus.eu/2023/12/03/calendar/00.jpg" alt="Featured image of post Calendar of travel photos 2023" /&gt;&lt;p&gt;&lt;strong&gt;Cover photo:&lt;/strong&gt; Am Graben, Kaufbeuren, Bayern, Deutschland&lt;/p&gt;
&lt;p&gt;&lt;img alt="Alpe Birkach, Gunzesried-Säge, Bayern, Deutschland" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/01.jpg" srcset="https://kabus.eu/2023/12/03/calendar/01_hu_e05890dfdb610005.jpg 800w, https://kabus.eu/2023/12/03/calendar/01_hu_fbf410f03f4be90a.jpg 1600w, https://kabus.eu/2023/12/03/calendar/01_hu_2385d2c203da0199.jpg 2400w, https://kabus.eu/2023/12/03/calendar/01.jpg 2880w" width="2880"&gt;
&lt;img alt="Dinant, Wallonie, Belgique" class="gallery-image" data-flex-basis="323px" data-flex-grow="134" height="2092" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/02.jpg" srcset="https://kabus.eu/2023/12/03/calendar/02_hu_3161784b5f4b13b2.jpg 800w, https://kabus.eu/2023/12/03/calendar/02_hu_55db5aeb015261d3.jpg 1600w, https://kabus.eu/2023/12/03/calendar/02_hu_cd141dc108c57011.jpg 2400w, https://kabus.eu/2023/12/03/calendar/02.jpg 2816w" width="2816"&gt;
&lt;img alt="Strand van Knokke-Heist, Vlaanderen, België" class="gallery-image" data-flex-basis="324px" data-flex-grow="135" height="2090" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/03.jpg" srcset="https://kabus.eu/2023/12/03/calendar/03_hu_4f37b17d836ab08a.jpg 800w, https://kabus.eu/2023/12/03/calendar/03_hu_8f03a853047ce585.jpg 1600w, https://kabus.eu/2023/12/03/calendar/03_hu_1c3538d37e880817.jpg 2400w, https://kabus.eu/2023/12/03/calendar/03.jpg 2828w" width="2828"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Vulcano &amp; Lipari, Italia" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/04.jpg" srcset="https://kabus.eu/2023/12/03/calendar/04_hu_4654a0e6c6386611.jpg 800w, https://kabus.eu/2023/12/03/calendar/04_hu_ca31fa85a92c0961.jpg 1600w, https://kabus.eu/2023/12/03/calendar/04_hu_747ff2e6d4cc8ab4.jpg 2400w, https://kabus.eu/2023/12/03/calendar/04.jpg 2880w" width="2880"&gt;
&lt;img alt="Santa Marina Salina, Italia" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/05.jpg" srcset="https://kabus.eu/2023/12/03/calendar/05_hu_6d0e635e3ca01df8.jpg 800w, https://kabus.eu/2023/12/03/calendar/05_hu_526a6a06b2f4f57e.jpg 1600w, https://kabus.eu/2023/12/03/calendar/05_hu_38635133686d90ee.jpg 2400w, https://kabus.eu/2023/12/03/calendar/05.jpg 2880w" width="2880"&gt;
&lt;img alt="US Route 26, Oregon, United States of America" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/06.jpg" srcset="https://kabus.eu/2023/12/03/calendar/06_hu_a2a13e48f2ebb182.jpg 800w, https://kabus.eu/2023/12/03/calendar/06_hu_8fa1bbdd424cedaf.jpg 1600w, https://kabus.eu/2023/12/03/calendar/06.jpg 2160w" width="2160"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="De Burcht, Leiden, Zuid-Holland, Nederland" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/07.jpg" srcset="https://kabus.eu/2023/12/03/calendar/07_hu_cf3e8b585112f096.jpg 800w, https://kabus.eu/2023/12/03/calendar/07_hu_7e904e591a61042b.jpg 1600w, https://kabus.eu/2023/12/03/calendar/07.jpg 2160w" width="2160"&gt;
&lt;img alt="Doezastraat, Leiden, Zuid-Holland, Nederland" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/08.jpg" srcset="https://kabus.eu/2023/12/03/calendar/08_hu_a9243697f6196e66.jpg 800w, https://kabus.eu/2023/12/03/calendar/08_hu_3b5e4baed8271cd0.jpg 1600w, https://kabus.eu/2023/12/03/calendar/08_hu_45a4cbc14e91589c.jpg 2400w, https://kabus.eu/2023/12/03/calendar/08.jpg 2880w" width="2880"&gt;
&lt;img alt="Kinsale, County Cork, Munster, Éire" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/09.jpg" srcset="https://kabus.eu/2023/12/03/calendar/09_hu_d2cfce0f09231611.jpg 800w, https://kabus.eu/2023/12/03/calendar/09_hu_52b51918896fbb2b.jpg 1600w, https://kabus.eu/2023/12/03/calendar/09_hu_6468063ce1d9c5a9.jpg 2400w, https://kabus.eu/2023/12/03/calendar/09.jpg 2880w" width="2880"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Curraghduff Farm, County Galway, Connacht, Éire" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/10.jpg" srcset="https://kabus.eu/2023/12/03/calendar/10_hu_b86c943c38d7a231.jpg 800w, https://kabus.eu/2023/12/03/calendar/10_hu_a4f9ecf03d78e3a8.jpg 1600w, https://kabus.eu/2023/12/03/calendar/10_hu_2445ea85fb149d99.jpg 2400w, https://kabus.eu/2023/12/03/calendar/10.jpg 2880w" width="2880"&gt;
&lt;img alt="Îlet du Gosier, Guadeloupe, France" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/11.jpg" srcset="https://kabus.eu/2023/12/03/calendar/11_hu_23a7b2bca4f08dbf.jpg 800w, https://kabus.eu/2023/12/03/calendar/11_hu_d67b16f759b98410.jpg 1600w, https://kabus.eu/2023/12/03/calendar/11.jpg 2160w" width="2160"&gt;
&lt;img alt="Vieux Bourg, Guadeloupe, France" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/12/03/calendar/12.jpg" srcset="https://kabus.eu/2023/12/03/calendar/12_hu_723cb36498f286c1.jpg 800w, https://kabus.eu/2023/12/03/calendar/12_hu_d6f967ee76eae494.jpg 1600w, https://kabus.eu/2023/12/03/calendar/12_hu_dc0bc2b85ce920a6.jpg 2400w, https://kabus.eu/2023/12/03/calendar/12.jpg 2880w" width="2880"&gt;&lt;/p&gt;</description></item><item><title>Escaping rainy autumn to Guadeloupe</title><link>https://kabus.eu/2023/11/13/guadeloupe/</link><pubDate>Mon, 13 Nov 2023 16:29:44 +0100</pubDate><guid>https://kabus.eu/2023/11/13/guadeloupe/</guid><description>&lt;img src="https://kabus.eu/2023/11/13/guadeloupe/river.jpg" alt="Featured image of post Escaping rainy autumn to Guadeloupe" /&gt;&lt;p&gt;The Guadeloupe archipelago has some of the most beautiful beaches that I have ever seen.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Beach of Grand Bourg on Marie Galante" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/marie-galante.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/marie-galante_hu_b965c7fae1f6dd95.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/marie-galante.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="I find the spelling of the local creole easier to read than the French one…" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/twazyem.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/twazyem_hu_7ddcb54deed33a60.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/twazyem.jpg 1600w" width="1600"&gt;
&lt;img alt="So many cute cats!" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/cats.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/cats_hu_61aafe2ed5a79e47.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/cats.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The main land is relatively well connected by the local, orange buses (Karulis) and the long-distance bus network." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/bus.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/bus_hu_af5d43dc4cc6d0fb.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/bus.jpg 1200w" width="1200"&gt;
&lt;img alt="I took a small passenger ferry to Îlet du Gosier." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/ferry.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/ferry_hu_3318ee66d00dabf3.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/ferry.jpg 1600w" width="1600"&gt;
&lt;img alt="Photosynthesis" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/sunglasses.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/sunglasses_hu_cc94e87cbb878b02.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/sunglasses.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="There are many nice places to snorkel around Guadeloupe." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/snorkel.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/snorkel_hu_dd5e337cea0acc9d.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/snorkel.jpg 1200w" width="1200"&gt;
&lt;img alt="I always try to stay in the shade." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/palm.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/palm_hu_4882ed085c572853.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/palm.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Island waste…" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/trash.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/trash_hu_752d08e627e0ceff.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/trash.jpg 1600w" width="1600"&gt;
&lt;img alt="Fresh tuna in the “Super U” supermarket" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/tuna.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/tuna_hu_c282d21d1796aee8.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/tuna.jpg 1600w" width="1600"&gt;
&lt;img alt="My hostel breakfast with bread, banana, cucumber and avocado all from Guadeloupe" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/breakfast.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/breakfast_hu_c5c7d81f112ec69f.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/breakfast.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Real tropical rainforest. Don’t forget mosquito spray!" class="gallery-image" data-flex-basis="550px" data-flex-grow="229" height="698" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/jungle.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/jungle_hu_b3fa63b17ebd13bb.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/jungle.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The beach of Grand Bas-Vent" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/beach.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/beach_hu_9397281fc0cf52f4.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/beach.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Packing recommendation: a hammock" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/hammock.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/hammock_hu_17b10abeca9c6f77.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/hammock.jpg 1200w" width="1200"&gt;
&lt;img alt="Finally, I also sailed in the Caribbean!" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/catamaran.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/catamaran_hu_b15f919eba9b9459.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/catamaran.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="video-wrapper"&gt;
 &lt;video
 controls
 src="crab.mp4"
 
 
 
 &gt;
 &lt;p&gt;
 Your browser doesn't support HTML5 video. Here is a
 &lt;a href="crab.mp4"&gt;link to the video&lt;/a&gt; instead.
 &lt;/p&gt;
 &lt;/video&gt;
&lt;/div&gt;

&lt;em&gt;I met a hermit crab on a hike.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Climbing the Soufrière" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/vulcano.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/vulcano_hu_c51cee437a3be289.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/vulcano.jpg 1600w" width="1600"&gt;
&lt;img alt="Unfortunately, the summit was covered in clouds." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/hike.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/hike_hu_5249295cbf4d7d1a.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/hike.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Fresh coconut on the beach" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/coconut.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/coconut_hu_e3305bc646f02046.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/coconut.jpg 1200w" width="1200"&gt;
&lt;img alt="Perfect weather" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/pose.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/pose_hu_10bd00c7e54547ec.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/pose.jpg 1200w" width="1200"&gt;
&lt;img alt="Bye dear hostel cat “Sushi”" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/cat.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/cat_hu_facb73888e3cb8b3.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/cat.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;h1 id="a-day-in-paris-between-a-transatlantic-flight-and-a-eurostar-train-ride"&gt;A day in Paris between a transatlantic flight and a Eurostar train ride
&lt;/h1&gt;&lt;p&gt;&lt;img alt="In Paris, I was able to get used to the rainy autumn again." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/paris.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/paris_hu_b39d3740f4901cf4.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/paris.jpg 1600w" width="1600"&gt;
&lt;img alt="This train of the Paris Metro runs on tyres." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/11/13/guadeloupe/metro.jpg" srcset="https://kabus.eu/2023/11/13/guadeloupe/metro_hu_9e9eb2573ff7c577.jpg 800w, https://kabus.eu/2023/11/13/guadeloupe/metro.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="video-wrapper"&gt;
 &lt;video
 controls
 src="streets.mp4"
 
 
 
 &gt;
 &lt;p&gt;
 Your browser doesn't support HTML5 video. Here is a
 &lt;a href="streets.mp4"&gt;link to the video&lt;/a&gt; instead.
 &lt;/p&gt;
 &lt;/video&gt;
&lt;/div&gt;

&lt;em&gt;It can be worth taking a detour with the metro.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Roadtrip in Ireland</title><link>https://kabus.eu/2023/09/28/ireland/</link><pubDate>Thu, 28 Sep 2023 18:12:13 +0200</pubDate><guid>https://kabus.eu/2023/09/28/ireland/</guid><description>&lt;img src="https://kabus.eu/2023/09/28/ireland/ruins.jpg" alt="Featured image of post Roadtrip in Ireland" /&gt;&lt;p&gt;&lt;img alt="Dunguaire Castle: A typical Irish castle" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/castle.jpg" srcset="https://kabus.eu/2023/09/28/ireland/castle_hu_3a0db97022a793e7.jpg 800w, https://kabus.eu/2023/09/28/ireland/castle.jpg 1600w" width="1600"&gt;
&lt;img alt="The Cliffs of Moher" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/moher.jpg" srcset="https://kabus.eu/2023/09/28/ireland/moher_hu_d353b3fc8d2d2186.jpg 800w, https://kabus.eu/2023/09/28/ireland/moher.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Full Irish Breakfast. I really was quite full afterwards." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/breakfast.jpg" srcset="https://kabus.eu/2023/09/28/ireland/breakfast_hu_38ca49acd06d7027.jpg 800w, https://kabus.eu/2023/09/28/ireland/breakfast.jpg 1200w" width="1200"&gt;
&lt;img alt="Cozy dining room in our hostel." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/cozy.jpg" srcset="https://kabus.eu/2023/09/28/ireland/cozy_hu_8f26db9604d05a1e.jpg 800w, https://kabus.eu/2023/09/28/ireland/cozy.jpg 1600w" width="1600"&gt;
&lt;img alt="Shepherd: potatoes with potatoes and potatoes" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/shepherds-pie.jpg" srcset="https://kabus.eu/2023/09/28/ireland/shepherds-pie_hu_de7bfa055c7d307a.jpg 800w, https://kabus.eu/2023/09/28/ireland/shepherds-pie.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="A gate in Birr Gardens" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/gate.jpg" srcset="https://kabus.eu/2023/09/28/ireland/gate_hu_c57180b8a19e5a13.jpg 800w, https://kabus.eu/2023/09/28/ireland/gate.jpg 1200w" width="1200"&gt;
&lt;img alt="The Leviathan telescope was already used before the invention of photography to describe galaxies in detail." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/telescope.jpg" srcset="https://kabus.eu/2023/09/28/ireland/telescope_hu_9f80967f709636bb.jpg 800w, https://kabus.eu/2023/09/28/ireland/telescope.jpg 1200w" width="1200"&gt;
&lt;img alt="Clonmacnoise is located next to River Shannon." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/shannon.jpg" srcset="https://kabus.eu/2023/09/28/ireland/shannon_hu_7cb397ecf5de2af9.jpg 800w, https://kabus.eu/2023/09/28/ireland/shannon.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="video-wrapper"&gt;
 &lt;video
 controls
 src="drive.mp4"
 
 
 
 &gt;
 &lt;p&gt;
 Your browser doesn't support HTML5 video. Here is a
 &lt;a href="drive.mp4"&gt;link to the video&lt;/a&gt; instead.
 &lt;/p&gt;
 &lt;/video&gt;
&lt;/div&gt;

&lt;em&gt;Perfect visibility at Conor Pass.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="This is where we should have been able to see the sea." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/fog.jpg" srcset="https://kabus.eu/2023/09/28/ireland/fog_hu_419d7c3ca7ceaef5.jpg 800w, https://kabus.eu/2023/09/28/ireland/fog.jpg 1600w" width="1600"&gt;
&lt;img alt="I highly doubt that these boats are seaworthy." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/buoy.jpg" srcset="https://kabus.eu/2023/09/28/ireland/buoy_hu_cda6d403bddde2e2.jpg 800w, https://kabus.eu/2023/09/28/ireland/buoy.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Three so-calleed Galway hooker fishing boats" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/boats.jpg" srcset="https://kabus.eu/2023/09/28/ireland/boats_hu_13097eca9c15c8bb.jpg 800w, https://kabus.eu/2023/09/28/ireland/boats.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="City of Galway" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/galway.jpg" srcset="https://kabus.eu/2023/09/28/ireland/galway_hu_e715c2460ce26b2f.jpg 800w, https://kabus.eu/2023/09/28/ireland/galway.jpg 1600w" width="1600"&gt;
&lt;img alt="Kingfisher graffiti in Cork" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/kingfisher.jpg" srcset="https://kabus.eu/2023/09/28/ireland/kingfisher_hu_9808da709044b932.jpg 800w, https://kabus.eu/2023/09/28/ireland/kingfisher.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="By bus, you can quickly reach the city centre of Cork from Belvedere Lodge." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/hotel.jpg" srcset="https://kabus.eu/2023/09/28/ireland/hotel_hu_1addfc074cc2973a.jpg 800w, https://kabus.eu/2023/09/28/ireland/hotel.jpg 1600w" width="1600"&gt;
&lt;img alt="And the vibes there are really nice." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/fireplace.jpg" srcset="https://kabus.eu/2023/09/28/ireland/fireplace_hu_35c431ebb3f46b0d.jpg 800w, https://kabus.eu/2023/09/28/ireland/fireplace.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="“Desmond” or “Deasmhumhain” is Irish Gaelic for “South Munster”." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/desmond.jpg" srcset="https://kabus.eu/2023/09/28/ireland/desmond_hu_ca154305d4844b7a.jpg 800w, https://kabus.eu/2023/09/28/ireland/desmond.jpg 1600w" width="1600"&gt;
&lt;img alt="Of course I followed the signs to Desmond Castle!" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/signs.jpg" srcset="https://kabus.eu/2023/09/28/ireland/signs_hu_283eb8c8cd71552c.jpg 800w, https://kabus.eu/2023/09/28/ireland/signs.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Irish pub culture" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/pub.jpg" srcset="https://kabus.eu/2023/09/28/ireland/pub_hu_e092e6d19988ee2c.jpg 800w, https://kabus.eu/2023/09/28/ireland/pub.jpg 1600w" width="1600"&gt;
&lt;img alt="Really cozy…" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/candle.jpg" srcset="https://kabus.eu/2023/09/28/ireland/candle_hu_ffadf0d35babae23.jpg 800w, https://kabus.eu/2023/09/28/ireland/candle.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="video-wrapper"&gt;
 &lt;video
 controls
 src="music.mp4"
 
 
 
 &gt;
 &lt;p&gt;
 Your browser doesn't support HTML5 video. Here is a
 &lt;a href="music.mp4"&gt;link to the video&lt;/a&gt; instead.
 &lt;/p&gt;
 &lt;/video&gt;
&lt;/div&gt;

&lt;em&gt;Authentic traditional Irish music&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Alpacas!" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/alpaca.jpg" srcset="https://kabus.eu/2023/09/28/ireland/alpaca_hu_687f8d4a70e8e5c8.jpg 800w, https://kabus.eu/2023/09/28/ireland/alpaca.jpg 1200w" width="1200"&gt;
&lt;img alt="Enjoy your meal!" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/munching.jpg" srcset="https://kabus.eu/2023/09/28/ireland/munching_hu_96bd63ab4e660459.jpg 800w, https://kabus.eu/2023/09/28/ireland/munching.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="This is what’s called “Glamping”." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/hut.jpg" srcset="https://kabus.eu/2023/09/28/ireland/hut_hu_caad086d838ca2e5.jpg 800w, https://kabus.eu/2023/09/28/ireland/hut.jpg 1600w" width="1600"&gt;
&lt;img alt="Mr. Tayto is good company." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/09/28/ireland/tayto.jpg" srcset="https://kabus.eu/2023/09/28/ireland/tayto_hu_37714a6e8e0f5bdd.jpg 800w, https://kabus.eu/2023/09/28/ireland/tayto.jpg 1200w" width="1200"&gt;&lt;/p&gt;</description></item><item><title>Spring in the Pacific North-West</title><link>https://kabus.eu/2023/05/22/oregon/</link><pubDate>Mon, 22 May 2023 13:38:58 +0200</pubDate><guid>https://kabus.eu/2023/05/22/oregon/</guid><description>&lt;img src="https://kabus.eu/2023/05/22/oregon/skyline.jpg" alt="Featured image of post Spring in the Pacific North-West" /&gt;&lt;p&gt;&lt;img alt="On the plane to Portland, I already had a great view of the famous volcanoes of the Pacific North-West, like Mount Rainier." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/mountain.jpg" srcset="https://kabus.eu/2023/05/22/oregon/mountain_hu_6a64bee56d6d66de.jpg 800w, https://kabus.eu/2023/05/22/oregon/mountain.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The Oregon Conferention Center has two quite distinct glass towers that can be seen from all over the city." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/towers.jpg" srcset="https://kabus.eu/2023/05/22/oregon/towers_hu_23e5e28cf4063d74.jpg 800w, https://kabus.eu/2023/05/22/oregon/towers.jpg 1600w" width="1600"&gt;
&lt;img alt="The famous Old Town neon-sign." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/old-town.jpg" srcset="https://kabus.eu/2023/05/22/oregon/old-town_hu_f384141dd936354c.jpg 800w, https://kabus.eu/2023/05/22/oregon/old-town.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Portland has bridges of many different styles on display: Steel Bridge in the city centre." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/rust.jpg" srcset="https://kabus.eu/2023/05/22/oregon/rust_hu_af1a5fbf2db11af1.jpg 800w, https://kabus.eu/2023/05/22/oregon/rust.jpg 1600w" width="1600"&gt;
&lt;img alt="The Saint Johns Bridge" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/bridge.jpg" srcset="https://kabus.eu/2023/05/22/oregon/bridge_hu_4dfbeb9a130f8476.jpg 800w, https://kabus.eu/2023/05/22/oregon/bridge.jpg 1600w" width="1600"&gt;
&lt;img alt="A rarity in the US: Tilikum Crossing is not accessible to cars." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/suspension.jpg" srcset="https://kabus.eu/2023/05/22/oregon/suspension_hu_5e99e6243cc87fdb.jpg 800w, https://kabus.eu/2023/05/22/oregon/suspension.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Trams are called “light rail” in America." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/light-rail.jpg" srcset="https://kabus.eu/2023/05/22/oregon/light-rail_hu_6a93a02b863c34f6.jpg 800w, https://kabus.eu/2023/05/22/oregon/light-rail.jpg 1600w" width="1600"&gt;
&lt;img alt="First and foremost, infrastructure in the US is designed for cars, though." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/ramp.jpg" srcset="https://kabus.eu/2023/05/22/oregon/ramp_hu_cddc666d92a89e40.jpg 800w, https://kabus.eu/2023/05/22/oregon/ramp.jpg 1600w" width="1600"&gt;
&lt;img alt="An eight-lane interstate highway runs right along the Willamette river." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/traffic.jpg" srcset="https://kabus.eu/2023/05/22/oregon/traffic_hu_8b459eb20ac05696.jpg 800w, https://kabus.eu/2023/05/22/oregon/traffic.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="My talk at the conference" class="gallery-image" data-flex-basis="272px" data-flex-grow="113" height="1407" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/presentation.jpg" srcset="https://kabus.eu/2023/05/22/oregon/presentation_hu_4a1666f96c1bf472.jpg 800w, https://kabus.eu/2023/05/22/oregon/presentation.jpg 1600w" width="1600"&gt;
&lt;img alt="Breakfast at Denny’s american diner with enough calories for an entire day" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/dennys.jpg" srcset="https://kabus.eu/2023/05/22/oregon/dennys_hu_b6aed6effb81e43c.jpg 800w, https://kabus.eu/2023/05/22/oregon/dennys.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Two axolotl smile at me from inside their aquarium." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/axolotl.jpg" srcset="https://kabus.eu/2023/05/22/oregon/axolotl_hu_c0e32674421f8be7.jpg 800w, https://kabus.eu/2023/05/22/oregon/axolotl.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Portland has a stunning Japanese garden." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/zen.jpg" srcset="https://kabus.eu/2023/05/22/oregon/zen_hu_a972721af78b5561.jpg 800w, https://kabus.eu/2023/05/22/oregon/zen.jpg 1200w" width="1200"&gt;
&lt;img alt="There were bonsai trees, some of which were hundreds of years old." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/bonsai.jpg" srcset="https://kabus.eu/2023/05/22/oregon/bonsai_hu_15a5eb84edc557b4.jpg 800w, https://kabus.eu/2023/05/22/oregon/bonsai.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Oregon is known for its green coniferous forests." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/trees.jpg" srcset="https://kabus.eu/2023/05/22/oregon/trees_hu_ee8525f77ff436b0.jpg 800w, https://kabus.eu/2023/05/22/oregon/trees.jpg 1200w" width="1200"&gt;
&lt;img alt="The giant redwood trees make even the biggest American pickup trucks look small." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/redwood.jpg" srcset="https://kabus.eu/2023/05/22/oregon/redwood_hu_52bc23b1dd8ae2b4.jpg 800w, https://kabus.eu/2023/05/22/oregon/redwood.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Trip to Cannon Beach" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/beach.jpg" srcset="https://kabus.eu/2023/05/22/oregon/beach_hu_c659df9d07dabf51.jpg 800w, https://kabus.eu/2023/05/22/oregon/beach.jpg 1600w" width="1600"&gt;
&lt;img alt="Perfect weather to fly a kite." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/05/22/oregon/kite.jpg" srcset="https://kabus.eu/2023/05/22/oregon/kite_hu_8bfc54048e349123.jpg 800w, https://kabus.eu/2023/05/22/oregon/kite.jpg 1200w" width="1200"&gt;&lt;/p&gt;</description></item><item><title>Vulcanic islands and sailing boats</title><link>https://kabus.eu/2023/04/17/sicily/</link><pubDate>Mon, 17 Apr 2023 12:09:30 +0200</pubDate><guid>https://kabus.eu/2023/04/17/sicily/</guid><description>&lt;img src="https://kabus.eu/2023/04/17/sicily/sunset.jpg" alt="Featured image of post Vulcanic islands and sailing boats" /&gt;&lt;p&gt;This sailing trip was organised by SIRUB, the sailing club of Ruhr-University Bochum.
If you live in the Ruhr area and want to learn sailing, feel free to visit &lt;a class="link" href="https://sirub.com" target="_blank" rel="noopener"
 &gt;SIRUB.com&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id="lipari-islands"&gt;Lipari Islands
&lt;/h1&gt;&lt;h2 id="vulcano-active-volcanic-island"&gt;Vulcano: Active volcanic island
&lt;/h2&gt;&lt;p&gt;&lt;img alt="“This is where we want to go!”" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/wheel.jpg" srcset="https://kabus.eu/2023/04/17/sicily/wheel_hu_ea6e822f77004812.jpg 800w, https://kabus.eu/2023/04/17/sicily/wheel.jpg 1600w" width="1600"&gt;
&lt;img alt="View from the peak" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/islands.jpg" srcset="https://kabus.eu/2023/04/17/sicily/islands_hu_5f7982697883ac8a.jpg 800w, https://kabus.eu/2023/04/17/sicily/islands.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Panorama of the crater of Vulcano" class="gallery-image" data-flex-basis="1691px" data-flex-grow="704" height="227" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/vulcano.jpg" srcset="https://kabus.eu/2023/04/17/sicily/vulcano_hu_dd3b482cd4d6cec5.jpg 800w, https://kabus.eu/2023/04/17/sicily/vulcano.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;h2 id="lipari-easter-on-the-main-island"&gt;Lipari: Easter on the main island
&lt;/h2&gt;&lt;p&gt;&lt;img alt="Easter procession to church" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/easter.jpg" srcset="https://kabus.eu/2023/04/17/sicily/easter_hu_c8da22418c6a9ca6.jpg 800w, https://kabus.eu/2023/04/17/sicily/easter.jpg 1600w" width="1600"&gt;
&lt;img alt="On our way to Salina" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/evening.jpg" srcset="https://kabus.eu/2023/04/17/sicily/evening_hu_8e9cda3644c4df0a.jpg 800w, https://kabus.eu/2023/04/17/sicily/evening.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Good vibes on board" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/crew.jpg" srcset="https://kabus.eu/2023/04/17/sicily/crew_hu_8b5a9bbffcd3c5bd.jpg 800w, https://kabus.eu/2023/04/17/sicily/crew.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;h2 id="salina-sleepy-fisher-island"&gt;Salina: Sleepy fisher island
&lt;/h2&gt;&lt;p&gt;&lt;img alt="Coastal promenade of Santa Marina" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/salina.jpg" srcset="https://kabus.eu/2023/04/17/sicily/salina_hu_56ffd3ffc1a6849a.jpg 800w, https://kabus.eu/2023/04/17/sicily/salina.jpg 1600w" width="1600"&gt;
&lt;img alt="After-lunch nap…" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/sleepy.jpg" srcset="https://kabus.eu/2023/04/17/sicily/sleepy_hu_232130b66e46d90c.jpg 800w, https://kabus.eu/2023/04/17/sicily/sleepy.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The crew" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/mirror.jpg" srcset="https://kabus.eu/2023/04/17/sicily/mirror_hu_341ae722f54acd4f.jpg 800w, https://kabus.eu/2023/04/17/sicily/mirror.jpg 1200w" width="1200"&gt;
&lt;img alt="Our chartered boat in an almost vacant harbour" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/pier.jpg" srcset="https://kabus.eu/2023/04/17/sicily/pier_hu_8c9f72af73881734.jpg 800w, https://kabus.eu/2023/04/17/sicily/pier.jpg 1200w" width="1200"&gt;
&lt;img alt="It’s hard to believe that this is where we bought fish and shrimp!" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/fisher.jpg" srcset="https://kabus.eu/2023/04/17/sicily/fisher_hu_745f35c8ba424f1f.jpg 800w, https://kabus.eu/2023/04/17/sicily/fisher.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;h2 id="stromboli-volcanic-eruptions-from-sea"&gt;Stromboli: Volcanic eruptions from sea
&lt;/h2&gt;&lt;p&gt;&lt;div class="video-wrapper"&gt;
 &lt;video
 controls
 src="sail.mp4"
 
 
 
 &gt;
 &lt;p&gt;
 Your browser doesn't support HTML5 video. Here is a
 &lt;a href="sail.mp4"&gt;link to the video&lt;/a&gt; instead.
 &lt;/p&gt;
 &lt;/video&gt;
&lt;/div&gt;

&lt;em&gt;Fifteen nautical miles to go until Stromboli!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="From outside of the exclusion zone around the 924m-tall volcano, we were able to see around 300m-tall fountains of ash and rock." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/stromboli.jpg" srcset="https://kabus.eu/2023/04/17/sicily/stromboli_hu_3b613d4dd82b43d8.jpg 800w, https://kabus.eu/2023/04/17/sicily/stromboli.jpg 1600w" width="1600"&gt;
&lt;img alt="A small lighthouse on Strombolicchio" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/rock.jpg" srcset="https://kabus.eu/2023/04/17/sicily/rock_hu_99e27914ed9db1de.jpg 800w, https://kabus.eu/2023/04/17/sicily/rock.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;h2 id="panarea-island-of-villas"&gt;Panarea: Island of villas
&lt;/h2&gt;&lt;p&gt;&lt;img alt="Anchoring at Panarea" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/anchor.jpg" srcset="https://kabus.eu/2023/04/17/sicily/anchor_hu_6271d045005c738c.jpg 800w, https://kabus.eu/2023/04/17/sicily/anchor.jpg 1600w" width="1600"&gt;
&lt;img alt="In my opinion, Panarea is so pictureque!" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/field.jpg" srcset="https://kabus.eu/2023/04/17/sicily/field_hu_12a0a256aa4440a3.jpg 800w, https://kabus.eu/2023/04/17/sicily/field.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Because of clouds, today’s view on Stromboli wasn’t as good as yesterday’s!" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/roof.jpg" srcset="https://kabus.eu/2023/04/17/sicily/roof_hu_378994f71c82324.jpg 800w, https://kabus.eu/2023/04/17/sicily/roof.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;h1 id="sicily"&gt;Sicily
&lt;/h1&gt;&lt;h2 id="taormina"&gt;Taormina
&lt;/h2&gt;&lt;p&gt;&lt;img alt="Taormina’s Greek amphitheater has a view of Etna." class="gallery-image" data-flex-basis="662px" data-flex-grow="275" height="580" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/theatre.jpg" srcset="https://kabus.eu/2023/04/17/sicily/theatre_hu_e266cc838d4bc5bb.jpg 800w, https://kabus.eu/2023/04/17/sicily/theatre.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="I always use UV-reflective shirts to protect my skin from the sun." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/street.jpg" srcset="https://kabus.eu/2023/04/17/sicily/street_hu_f1fc85eff9a5608e.jpg 800w, https://kabus.eu/2023/04/17/sicily/street.jpg 1200w" width="1200"&gt;
&lt;img alt="Our trip started and ended in Portorosa." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/harbour.jpg" srcset="https://kabus.eu/2023/04/17/sicily/harbour_hu_101e7ad8ad6ccc9c.jpg 800w, https://kabus.eu/2023/04/17/sicily/harbour.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;h2 id="palermo"&gt;Palermo
&lt;/h2&gt;&lt;p&gt;&lt;img alt="The Cathedral of Palermo" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/blossom.jpg" srcset="https://kabus.eu/2023/04/17/sicily/blossom_hu_a7636ed9a2962ed7.jpg 800w, https://kabus.eu/2023/04/17/sicily/blossom.jpg 1600w" width="1600"&gt;
&lt;img alt="This palm tree fills the atrium perfectly." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/palm.jpg" srcset="https://kabus.eu/2023/04/17/sicily/palm_hu_82160f90a24633d8.jpg 800w, https://kabus.eu/2023/04/17/sicily/palm.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Delicious brioche con gelato!" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/gelato.jpg" srcset="https://kabus.eu/2023/04/17/sicily/gelato_hu_327c00ee0be7d2cc.jpg 800w, https://kabus.eu/2023/04/17/sicily/gelato.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Art in the botanical garden" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/snake.jpg" srcset="https://kabus.eu/2023/04/17/sicily/snake_hu_bb17d016e127e586.jpg 800w, https://kabus.eu/2023/04/17/sicily/snake.jpg 1200w" width="1200"&gt;
&lt;img alt="Statue of Carl Linnaeus in the botanical garden" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/linnaeus.jpg" srcset="https://kabus.eu/2023/04/17/sicily/linnaeus_hu_62daf65b36c5eb50.jpg 800w, https://kabus.eu/2023/04/17/sicily/linnaeus.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="View of a monstera plant at Chiesa di San Giovanni degli Eremiti" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/window.jpg" srcset="https://kabus.eu/2023/04/17/sicily/window_hu_d0f5e9de9fe31d3b.jpg 800w, https://kabus.eu/2023/04/17/sicily/window.jpg 1200w" width="1200"&gt;
&lt;img alt="An abundance of gold in the Norman Palace" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/gold.jpg" srcset="https://kabus.eu/2023/04/17/sicily/gold_hu_be72c5cd7dbbe843.jpg 800w, https://kabus.eu/2023/04/17/sicily/gold.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="This cat chose quite the windy spot!" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2023/04/17/sicily/cat.jpg" srcset="https://kabus.eu/2023/04/17/sicily/cat_hu_af49d41f413c1c62.jpg 800w, https://kabus.eu/2023/04/17/sicily/cat.jpg 1600w" width="1600"&gt;&lt;/p&gt;</description></item><item><title>Calendar of travel photos 2022</title><link>https://kabus.eu/2022/12/13/calendar/</link><pubDate>Tue, 13 Dec 2022 09:19:12 +0100</pubDate><guid>https://kabus.eu/2022/12/13/calendar/</guid><description>&lt;img src="https://kabus.eu/2022/12/13/calendar/00.jpg" alt="Featured image of post Calendar of travel photos 2022" /&gt;&lt;p&gt;&lt;strong&gt;Cover photo:&lt;/strong&gt; Mangel Halto, Aruba&lt;/p&gt;
&lt;p&gt;&lt;img alt="South-West view from Kitzsteinhorn, Österreich" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/01.jpg" srcset="https://kabus.eu/2022/12/13/calendar/01_hu_4beb14aaee928848.jpg 800w, https://kabus.eu/2022/12/13/calendar/01_hu_d5e3d699bdb3361b.jpg 1600w, https://kabus.eu/2022/12/13/calendar/01_hu_e3a0e2215d28f8ca.jpg 2400w, https://kabus.eu/2022/12/13/calendar/01.jpg 2880w" width="2880"&gt;
&lt;img alt="Pistolstræde, København, Danmark" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/02.jpg" srcset="https://kabus.eu/2022/12/13/calendar/02_hu_997bd2717c642e41.jpg 800w, https://kabus.eu/2022/12/13/calendar/02_hu_50ead3909bbd2d60.jpg 1600w, https://kabus.eu/2022/12/13/calendar/02.jpg 2160w" width="2160"&gt;
&lt;img alt="Pieterskerk, Leiden, Zuid-Holland, Nederland" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/03.jpg" srcset="https://kabus.eu/2022/12/13/calendar/03_hu_60b9c571dfb9b0fd.jpg 800w, https://kabus.eu/2022/12/13/calendar/03_hu_4c1bf93cd78dca0c.jpg 1600w, https://kabus.eu/2022/12/13/calendar/03.jpg 2160w" width="2160"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hortus Botanicus, Leiden, Zuid-Holland, Nederland" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/04.jpg" srcset="https://kabus.eu/2022/12/13/calendar/04_hu_256da0b0a72ea9ec.jpg 800w, https://kabus.eu/2022/12/13/calendar/04_hu_dc4ba90eac5710fb.jpg 1600w, https://kabus.eu/2022/12/13/calendar/04.jpg 2160w" width="2160"&gt;
&lt;img alt="Sumatrabrug, Leiden, Zuid-Holland, Nederland" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/05.jpg" srcset="https://kabus.eu/2022/12/13/calendar/05_hu_1e13fb18c8b7fcde.jpg 800w, https://kabus.eu/2022/12/13/calendar/05_hu_38f8d73678405192.jpg 1600w, https://kabus.eu/2022/12/13/calendar/05.jpg 2160w" width="2160"&gt;
&lt;img alt="Tamarijn, Oranjestad, Aruba" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/06.jpg" srcset="https://kabus.eu/2022/12/13/calendar/06_hu_d5c8e898fc15fcf7.jpg 800w, https://kabus.eu/2022/12/13/calendar/06_hu_a0406af22b5b9a5c.jpg 1600w, https://kabus.eu/2022/12/13/calendar/06.jpg 2160w" width="2160"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Scherenberg, Schee, NRW, Deutschland" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/07.jpg" srcset="https://kabus.eu/2022/12/13/calendar/07_hu_1b09b498dee6ad5d.jpg 800w, https://kabus.eu/2022/12/13/calendar/07_hu_e4a384f23045a6fa.jpg 1600w, https://kabus.eu/2022/12/13/calendar/07.jpg 2160w" width="2160"&gt;
&lt;img alt="Divi Divi Tree, Eagle Beach, Aruba" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/08.jpg" srcset="https://kabus.eu/2022/12/13/calendar/08_hu_33b974cf9ebf057b.jpg 800w, https://kabus.eu/2022/12/13/calendar/08_hu_2a65bc262e0517af.jpg 1600w, https://kabus.eu/2022/12/13/calendar/08_hu_8dabe4fe7b7adac.jpg 2400w, https://kabus.eu/2022/12/13/calendar/08.jpg 2880w" width="2880"&gt;
&lt;img alt="Sint-Baafsabdij, Gent, Vlaanderen, België" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/09.jpg" srcset="https://kabus.eu/2022/12/13/calendar/09_hu_3c2c19bd100a424a.jpg 800w, https://kabus.eu/2022/12/13/calendar/09_hu_6613955859b517e5.jpg 1600w, https://kabus.eu/2022/12/13/calendar/09.jpg 2160w" width="2160"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Strand van Vlissingen, Zeeland, Nederland" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/10.jpg" srcset="https://kabus.eu/2022/12/13/calendar/10_hu_f53c2a29aae0915d.jpg 800w, https://kabus.eu/2022/12/13/calendar/10_hu_dfb3d7f24373d4a4.jpg 1600w, https://kabus.eu/2022/12/13/calendar/10_hu_d9eaa1a1bdea8fe5.jpg 2400w, https://kabus.eu/2022/12/13/calendar/10.jpg 2880w" width="2880"&gt;
&lt;img alt="Olympiastadion, München, Bayern, Deutschland" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="2880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/11.jpg" srcset="https://kabus.eu/2022/12/13/calendar/11_hu_bf1e49b11a13bf18.jpg 800w, https://kabus.eu/2022/12/13/calendar/11_hu_df4c9a56fc05effd.jpg 1600w, https://kabus.eu/2022/12/13/calendar/11.jpg 2160w" width="2160"&gt;
&lt;img alt="Town Square, Disneyland Paris, France" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="2160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/12/13/calendar/12.jpg" srcset="https://kabus.eu/2022/12/13/calendar/12_hu_da7252aa6fec9d12.jpg 800w, https://kabus.eu/2022/12/13/calendar/12_hu_82e457b40119c5a3.jpg 1600w, https://kabus.eu/2022/12/13/calendar/12_hu_86218bb632fb8174.jpg 2400w, https://kabus.eu/2022/12/13/calendar/12.jpg 2880w" width="2880"&gt;&lt;/p&gt;</description></item><item><title>Dreamy beaches of Aruba</title><link>https://kabus.eu/2022/08/08/aruba/</link><pubDate>Mon, 08 Aug 2022 12:18:19 +0200</pubDate><guid>https://kabus.eu/2022/08/08/aruba/</guid><description>&lt;img src="https://kabus.eu/2022/08/08/aruba/beach.jpg" alt="Featured image of post Dreamy beaches of Aruba" /&gt;&lt;p&gt;&lt;img alt="Aruba may be its own country…" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/parliament.jpg" srcset="https://kabus.eu/2022/08/08/aruba/parliament_hu_7a950b61260a23e8.jpg 800w, https://kabus.eu/2022/08/08/aruba/parliament.jpg 1600w" width="1600"&gt;
&lt;img alt="…but it also is part of the Kingdom of the Netherlands." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/wilhelmina.jpg" srcset="https://kabus.eu/2022/08/08/aruba/wilhelmina_hu_33a5dc2dc4228183.jpg 800w, https://kabus.eu/2022/08/08/aruba/wilhelmina.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Finally some time to read!" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/book.jpg" srcset="https://kabus.eu/2022/08/08/aruba/book_hu_a0415c0d0892d703.jpg 800w, https://kabus.eu/2022/08/08/aruba/book.jpg 1200w" width="1200"&gt;
&lt;img alt="Tropical sunset" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/sunset.jpg" srcset="https://kabus.eu/2022/08/08/aruba/sunset_hu_f9a74b8631a5ac36.jpg 800w, https://kabus.eu/2022/08/08/aruba/sunset.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The famous Divi Divi tree" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/tree.jpg" srcset="https://kabus.eu/2022/08/08/aruba/tree_hu_188af96183090afc.jpg 800w, https://kabus.eu/2022/08/08/aruba/tree.jpg 1600w" width="1600"&gt;
&lt;img alt="Typical mangrove forest" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/mangrove.jpg" srcset="https://kabus.eu/2022/08/08/aruba/mangrove_hu_b32503fb8aa36100.jpg 800w, https://kabus.eu/2022/08/08/aruba/mangrove.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The ocean water is incredibly clean in Aruba!" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/poles.jpg" srcset="https://kabus.eu/2022/08/08/aruba/poles_hu_6da040e59038fb6c.jpg 800w, https://kabus.eu/2022/08/08/aruba/poles.jpg 1200w" width="1200"&gt;
&lt;img alt="Oh, the temptation to sail! Unfortunately, it didn’t work out on this holiday." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/catamaran.jpg" srcset="https://kabus.eu/2022/08/08/aruba/catamaran_hu_f0a652815d8d1e08.jpg 800w, https://kabus.eu/2022/08/08/aruba/catamaran.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The tram in Oranjestad really is just decoration." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/tram.jpg" srcset="https://kabus.eu/2022/08/08/aruba/tram_hu_e4d15c1912daf4e9.jpg 800w, https://kabus.eu/2022/08/08/aruba/tram.jpg 1600w" width="1600"&gt;
&lt;img alt="Thanks to the cultural link to Holland, there is delicious friet speciaal." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/fries.jpg" srcset="https://kabus.eu/2022/08/08/aruba/fries_hu_713bd891c190e4cf.jpg 800w, https://kabus.eu/2022/08/08/aruba/fries.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="A rare sight: A cactus with its fruit." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/cactus.jpg" srcset="https://kabus.eu/2022/08/08/aruba/cactus_hu_190a71d24bdbc6b2.jpg 800w, https://kabus.eu/2022/08/08/aruba/cactus.jpg 1200w" width="1200"&gt;
&lt;img alt="The fruit tasted slightly sweet." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/fruit.jpg" srcset="https://kabus.eu/2022/08/08/aruba/fruit_hu_6a3bf96b60c0d010.jpg 800w, https://kabus.eu/2022/08/08/aruba/fruit.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="In the east of the island, there are a few spacious caves." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/cave.jpg" srcset="https://kabus.eu/2022/08/08/aruba/cave_hu_88c947ce889644bd.jpg 800w, https://kabus.eu/2022/08/08/aruba/cave.jpg 1600w" width="1600"&gt;
&lt;img alt="Cave drawings were left there many ages ago." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/drawings.jpg" srcset="https://kabus.eu/2022/08/08/aruba/drawings_hu_4a92c31f2e31857a.jpg 800w, https://kabus.eu/2022/08/08/aruba/drawings.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Despite the heat, I climbed the Hooiberg." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/08/08/aruba/hill.jpg" srcset="https://kabus.eu/2022/08/08/aruba/hill_hu_d3d1dfc2ec527723.jpg 800w, https://kabus.eu/2022/08/08/aruba/hill.jpg 1600w" width="1600"&gt;&lt;/p&gt;</description></item><item><title>Numerical methods for the detection of phase defect structures in
excitable media</title><link>https://kabus.eu/2022/07/12/kabus2022numerical/</link><pubDate>Tue, 12 Jul 2022 00:00:00 +0000</pubDate><guid>https://kabus.eu/2022/07/12/kabus2022numerical/</guid><description>&lt;img src="https://kabus.eu/2022/07/12/kabus2022numerical/header.svg" alt="Featured image of post Numerical methods for the detection of phase defect structures in
excitable media
" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;This article was previously published in PLOS ONE 17(7): e0271351
(&lt;a class="link" href="#ref-kabus2022numerical" &gt;Kabus et al., 2022&lt;/a&gt;) and is a chapter of my
&lt;a class="link" href="https://kabus.eu/diss" &gt;dissertation&lt;/a&gt;.
The full thesis is available online as a
&lt;a class="link" href="https://dkabus.gitlab.io/thesis-phd/kabus2025dissertation.pdf" target="_blank" rel="noopener"
 &gt;PDF&lt;/a&gt; or
can be read &lt;a class="link" href="https://kabus.eu/diss" &gt;chapter by chapter on this website&lt;/a&gt;.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Desmond Kabus&lt;sup&gt;1,2,3&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0002-6965-5211" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0002-6965-5211&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Louise Arno&lt;sup&gt;1,3&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0001-9384-519X" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0001-9384-519X&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lore Leenknegt&lt;sup&gt;1,3&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0003-4667-3473" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0003-4667-3473&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Alexander V. Panfilov&lt;sup&gt;4,5,6&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0003-2643-642X" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0003-2643-642X&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hans Dierckx&lt;sup&gt;1&lt;/sup&gt;
(&lt;a class="link" href="https://orcid.org/0000-0003-0899-8082" target="_blank" rel="noopener"
 &gt;ORCID:
0000-0003-0899-8082&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Institutions:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Department of Mathematics, KU Leuven Campus Kortrijk (KULAK), Kortrijk, Belgium&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Laboratory of Experimental Cardiology, Leiden University Medical Center (LUMC), Leiden, The Netherlands&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;iSi Health, Institute of Physics-based Modeling for In Silico Health, KU Leuven, Leuven, Belgium&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Department of Physics and Astronomy, Ghent University, Ghent, Belgium&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Laboratory of Computational Biology and Medicine, Ural Federal University, Ekaterinburg, Russia&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;World-Class Research Center &amp;ldquo;Digital biodesign and personalized healthcare&amp;rdquo;, Sechenov University, Moscow, Russia&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Correspondence:&lt;/strong&gt; &lt;a class="link" href="mailto:h.dierckx@kuleuven.be" &gt;h.dierckx@kuleuven.be&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DOI:&lt;/strong&gt;
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0271351" target="_blank" rel="noopener"
 &gt;10.1371/journal.pone.0271351&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Editor:&lt;/strong&gt; Ivan Kryven, Utrecht University, The Netherlands&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Electrical waves that rotate in the heart organize dangerous cardiac
arrhythmias. Finding the region around which such rotation occurs is one
of the most important practical questions for arrhythmia management. For
many years, the main method for finding such regions was so-called phase
mapping, in which a continuous phase was assigned to points in the heart
based on their excitation status and defining the rotation region as a
point of phase singularity. Recent analysis, however, showed that in
many rotation regimes there exist phase discontinuities and the region
of rotation must be defined not as a point of phase singularity, but as
a phase defect line. In this paper, we use this novel methodology and
perform a comparative study of three different phase definitions applied
to in-silico data and to experimental data obtained from optical voltage
mapping experiments on monolayers of human atrial myocytes. We introduce
new phase defect detection algorithms and compare them with those that
appeared in literature already. We find that the phase definition is
more important than the algorithm to identify sudden spatial phase
variations. Sharp phase defect lines can be obtained from a phase
derived from local activation times observed during one cycle of
arrhythmia. Alternatively, similar quality can be obtained from a
reparameterization of the classical phase obtained from observation of a
single timeframe of transmembrane potential. We found that the phase
defect line length was (35.9 ± 6.2) mm in the Fenton-Karma model and
(4.01 ± 0.55) mm in cardiac human atrial myocyte monolayers. As local
activation times are obtained during standard clinical cardiac mapping,
the methods are also suitable to be applied to clinical datasets. All
studied methods are publicly available and can be downloaded from an
institutional web-server.&lt;/p&gt;
&lt;div id="sec:numerical:introduction"&gt;
&lt;h1 id="introduction"&gt;Introduction
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The heart is a self-organizing dynamical system for which the mechanical
contraction is regulated by waves of electrical activation travelling
through the cardiac wall. During cardiac arrhythmia complex electrical
patterns emerge that often result into a rotating pattern, either
circling around an obstacle or around its own wave back (&lt;a class="link" href="#ref-allessie1973circus" &gt;Allessie et
al., 1973&lt;/a&gt;; &lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al.,
1998&lt;/a&gt;). These vortices are also known as rotors,
or spiral waves in two dimensions (2D), or scroll waves in three
dimensions (3D).&lt;/p&gt;
&lt;p&gt;After the experimental observation of such structures in animal hearts
during ventricular tachycardia (&lt;a class="link" href="#ref-gray1995nonstationary" &gt;Gray et al.,
1995&lt;/a&gt;), it was conjectured that rotors can
sustain several heart rhythm disorders. However, the precise dynamics of
rotors, the structure of the rotor core and the most efficient manner to
remove them from the heart remain incompletely understood.&lt;/p&gt;
&lt;p&gt;A quantitative description of spiral wave motion requires localizing it
in space. In first approximation, the region around which the rotor
revolves is called the spiral wave core. The location of a spiral wave
at a given time can be further narrowed down to a single point, usually
called the spiral wave tip. Different methods exist to define the tip,
e.g. as the point where wave front and wave back merge (&lt;a class="link" href="#ref-zykov1987simulation" &gt;Zykov,
1987&lt;/a&gt;), as the point on a line of constant
voltage that does not change instantaneously, as an intersection between
two isolines of different variables (&lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma,
1998&lt;/a&gt;) or as a point singularity of the
activation phase (&lt;a class="link" href="#ref-bray2002considerations" &gt;Bray &amp;amp; Wikswo, 2002&lt;/a&gt;;
&lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al., 1998&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;By following the tip position of a single spiral wave over time, a
disc-like or star-like shape emerges, known as the spiral wave core.
Different types of cores have been observed (&lt;a class="link" href="#ref-winfree1991varieties" &gt;Winfree,
1991&lt;/a&gt;), and the non-circular cores are
referred to as meandering cores. Among the meandering cores, simulations
of detailed ionic models for cardiac tissue typically show so-called
linear cores, as depicted in Fig. &lt;a class="link" href="#fig:numerical:u" &gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:numerical:u"&gt;
&lt;p&gt;&lt;img alt="Qualitatively different tip trajectories of spiral waves in modelled cardiac tissue" class="gallery-image" data-flex-basis="190px" data-flex-grow="79" height="2832" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/u.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/u_hu_c24a5de26abd10db.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/u_hu_251e4667d5f1186c.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/u.png 2246w" width="2246"&gt;&lt;/p&gt;
&lt;p&gt;Figure 1: &lt;strong&gt;Qualitatively different tip trajectories of spiral waves in
modelled cardiac tissue.&lt;/strong&gt; The first row displays the Aliev-Panfilov
(AP) model (&lt;a class="link" href="#ref-aliev1996simple" &gt;Aliev &amp;amp; Panfilov, 1996&lt;/a&gt;), the second
row the Fenton-Karma (FK) model (&lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma,
1998&lt;/a&gt;) with modified Luo-Rudy I (MLR-I)
parameters, the third row Bueno-Orovio-Cherry-Fenton (BOCF)
(&lt;a class="link" href="#ref-bueno2008model" &gt;Bueno-Orovio et al., 2008&lt;/a&gt;), and the last row
displays optical voltage mapping data derived from monolayers of
conditionally immortalized human atrial myocytes (hiAMs) (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et
al., 2022&lt;/a&gt;). In
section &lt;a class="link" href="#sec:numerical:methods" &gt;3&lt;/a&gt;, we outline in more detail how these
data sets have been obtained. The first 3 columns show different
snapshots in time and are colored according to local transmembrane
voltage. Corresponding spiral wave tip trajectories are shown in the
last column. Darker coloring of the trajectory corresponds to later
points in time.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The linear-core regime arises in systems with long action potential
duration (APD): If the tip is next to a region of refractory tissue, it
will follow this interface until meeting a point where the tissue has
recovered. As a result, the tip moves along an almost straight line,
interleaved with turning points. These dynamics have not only been
observed in simulations, but were also reported in experiments (&lt;a class="link" href="#ref-efimov1999evidence" &gt;Efimov
et al., 1999&lt;/a&gt;; &lt;a class="link" href="#ref-janse1980flow" &gt;Janse et al.,
1980&lt;/a&gt;) in the form of a line of conduction block.
For this reason, it is important to elucidate the spatial distribution
of the core of the rotor.&lt;/p&gt;
&lt;p&gt;In 3D, a spiral wave or rotor becomes a structure called a scroll wave.
Within the scroll wave, the collection of spiral wave tips forms a
filament curve (&lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et al., 2006&lt;/a&gt;). In
numerical simulations with linear cores and a few experimental
observations (&lt;a class="link" href="#ref-efimov1999evidence" &gt;Efimov et al., 1999&lt;/a&gt;), the
straight segment in the linear core extends to a ribbon-like filament
(&lt;a class="link" href="#ref-efimov1999evidence" &gt;Efimov et al., 1999&lt;/a&gt;). However, these
spatially extended filaments have not been substantially included in
theory development, as was done for circular-core filaments (&lt;a class="link" href="#ref-keener1991effects" &gt;Keener,
1991&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Recent works (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al.,
2021&lt;/a&gt;) have proposed to treat linear cores
fundamentally different from circular cores. Specifically, classical
phase analysis (&lt;a class="link" href="#ref-bray2002considerations" &gt;Bray &amp;amp; Wikswo, 2002&lt;/a&gt;;
&lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al., 1998&lt;/a&gt;) of cardiac activation
patterns assumes that there is a phase singularity (PS) located near the
spiral wave tip. However, when the wave front reaches a part of tissue
that is for instance not fully recovered yet, a so-called conduction
block will form. On both sides of this conduction block line, there is a
different phase, such that the authors of (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al., 2021&lt;/a&gt;)
argue that the phase representation resembles more a phase defect line
(PDL), i.e. a line where the phase changes abruptly from one side to the
other. In other words, we go from a phase singularity (PS) to a branch
cut known in complex analysis. Making the distinction between phase
defects (PDs) and point singularities could have potential clinical use,
as current analysis methods in simulation, experiment and of clinical
data are only aiming to localize point singularities of phase.&lt;/p&gt;
&lt;p&gt;The aim of this paper is to provide and compare several methods to
numerically calculate the phase and the corresponding PDs. We include a
quantitative analysis of the results and the performance of the
algorithms.&lt;/p&gt;
&lt;p&gt;A summary of our workflow is presented in
Fig. &lt;a class="link" href="#fig:numerical:process" &gt;2&lt;/a&gt;: An image (e.g. of the transmembrane
potential $u$) is in the first step converted into a
phase ${\varphi}$. Where jumps in phase are detected,
the PD density $\rho$ (see below) will be much larger
than zero. If desired, the field
$\rho({{\bm{{x}}}},t)$ can be further processed to
yield localized PDLs.&lt;/p&gt;
&lt;div id="fig:numerical:process"&gt;
&lt;p&gt;&lt;img alt="An example of the steps done in the process of constructing the PD density ρ" class="gallery-image" data-flex-basis="766px" data-flex-grow="319" height="677" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/process.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/process_hu_df0cbb93b50ddd9f.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/process_hu_6c282aa3e9dea911.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/process.png 2161w" width="2161"&gt;&lt;/p&gt;
&lt;p&gt;Figure 2: &lt;strong&gt;An example of the steps done in the process of constructing
the PD density $\rho$.&lt;/strong&gt; (A) We start from the first
phase state variable $u$, often the normalized and
hence unitless transmembrane potential $V$. (B) Next,
from this $u$ and possibly other state variables, the
phase, here ${\varphi}^{\text{LAT}}$, is calculated.
How to compute it will be introduced below in
Eq. &lt;a class="link" href="#eq:numerical:phi_time" &gt;3&lt;/a&gt;. (C) Finally from the phase, the PD
density is produced based on one of the PDL detection algorithms; here,
the phase coherence (PC) method was used, which will be introduced below
in section &lt;a class="link" href="#sec:numerical:methods:defects:overview" &gt;3.3.3&lt;/a&gt;. These
quantities are plotted over a 2D square domain of myocardial tissue in
physical space. Color is used to represent the values of the quantities
mentioned in the top left corner. The same coloring will be used
throughout this manuscript.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;This manuscript is organized as follows: First, we briefly review the
concepts of phase, PSs and PDs (section &lt;a class="link" href="#sec:numerical:theory" &gt;2&lt;/a&gt;). In
the methods section &lt;a class="link" href="#sec:numerical:methods" &gt;3&lt;/a&gt;, we outline our
simulation methods and present several methods to trace PDs in
excitation patterns. Results of these methods and their performance are
presented in section &lt;a class="link" href="#sec:numerical:results" &gt;4&lt;/a&gt;. We conclude this paper
with a discussion and outlook (section &lt;a class="link" href="#sec:numerical:discussion" &gt;5&lt;/a&gt;
and section &lt;a class="link" href="#sec:numerical:conclusion" &gt;6&lt;/a&gt;).&lt;/p&gt;
&lt;div id="sec:numerical:theory"&gt;
&lt;h1 id="theoretical-background"&gt;Theoretical background
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:numerical:theory:phase"&gt;&lt;/p&gt;
&lt;h2 id="the-concept-of-phase"&gt;The concept of phase
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;As remarked long ago by Winfree (&lt;a class="link" href="#ref-winfree1974patterns" &gt;1974&lt;/a&gt;), many
biological processes take values within a cycle rather than on the line
of real numbers. Cardiac excitation is such an example, since during an
action potential, the cell membranes depolarize and repolarize in normal
circumstances along a predefined sequence, tracing out a closed loop in
state space. To keep track of the relative state of cells along this
cycle, the concept of phase can be used. In addition to the classical
phase definition, called activation phase
${\varphi}^{\text{act}}$ below, an alternative phase
based on local activation times (LAT) was defined by Arno et al.
(&lt;a class="link" href="#ref-arno2021phase" &gt;2021&lt;/a&gt;). In this paper, a third phase
${\varphi}^{\text{skew}}$ will be defined below as an
approximation of ${\varphi}^{\text{act}}$ when LAT
are not available (Eq. &lt;a class="link" href="#eq:numerical:phiskew" &gt;7&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Next, we will briefly review the previously defined phases
${\varphi}^{\text{act}}$ and
${\varphi}^{\text{LAT}}$.&lt;/p&gt;
&lt;p&gt;The activation phase ${\varphi}^{\text{act}}$ is the
phase as seen in a space spanned by two observables
$V({{\bm{{x}}}},t)$ and
$R({{\bm{{x}}}},t)$ in the system (&lt;a class="link" href="#ref-bray2002considerations" &gt;Bray &amp;amp; Wikswo,
2002&lt;/a&gt;; &lt;a class="link" href="#ref-clayton2006phase" &gt;Clayton et al.,
2006&lt;/a&gt;; &lt;a class="link" href="#ref-gray1998spatial" &gt;Gray et al.,
1998&lt;/a&gt;). We henceforth assume that
$V$ is representing the activation or depolarization
of the medium, i.e. in cardiac context, we take $V$
to be the normalized transmembrane potential.&lt;/p&gt;
&lt;p&gt;Even if there is only one variable $V$ observed, its
time-delayed version (&lt;a class="link" href="#ref-gray1995nonstationary" &gt;Gray et al., 1995&lt;/a&gt;),
time derivative (&lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma, 1998&lt;/a&gt;), or
Hilbert transform (&lt;a class="link" href="#ref-bray2002considerations" &gt;Bray &amp;amp; Wikswo, 2002&lt;/a&gt;)
can be used as a linearly independent variable $R$.
In numerical simulations, all state variables of the system can be
observed, and any pair can be chosen as $(V,R)$.
Then, one usually defines the activation phase as the polar angle of a
state in the $(V,R)$-plane, relative to a reference
point $(V_*, R_*)$ that lies within the cycle:
&lt;span id="eq:numerical:phi_state"&gt;$$
 {\varphi}^{\text{act}}= \operatorname{arctan2}(R-R_*, V-V_*) + c
\qquad{(1)}$$&lt;/span&gt; Here, the polar angle
is returned by the two-argument inverse tangent:
$\operatorname{arctan2}(y,x) = \arctan(y/x)$ if
$x\geq 0$ and
$\arctan(y/x) + \pi \operatorname{mod}2\pi$ if
$x&lt;0$. A constant $c$ can
furthermore be added to make
${\varphi}^{\text{act}}= 0$ correspond to the resting
state. The left column of Fig. &lt;a class="link" href="#fig:numerical:phases" &gt;3&lt;/a&gt; visualizes
${\varphi}^{\text{act}}$ for the four data sets
introduced in Fig. &lt;a class="link" href="#fig:numerical:u" &gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:numerical:phases"&gt;
&lt;p&gt;&lt;img alt="Illustration of the three different phases for one frame of four data sets" class="gallery-image" data-flex-basis="178px" data-flex-grow="74" height="2756" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/phases.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/phases_hu_b8416286f283ef50.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/phases_hu_1a6eb3b0052e16e.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/phases.png 2054w" width="2054"&gt;&lt;/p&gt;
&lt;p&gt;Figure 3: &lt;strong&gt;Illustration of the three different phases for one frame of
four data sets.&lt;/strong&gt; The color code represents the phase in modelled
myocardial tissue in a 2D square domain in the same scale as in
Fig. &lt;a class="link" href="#fig:numerical:process" &gt;2&lt;/a&gt; B.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;We recently proposed a second definition of phase that is based on the
local activation time (LAT) of tissue (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;). The LAT, which is commonly used clinically,
is defined as the time $t^{\text{arrival}}$ when the
tissue locally depolarizes, i.e. when the transmembrane voltage
$V$ at that point exceeds a value
$V_*$.&lt;/p&gt;
&lt;p&gt;In noisy circumstances (see Fig. &lt;a class="link" href="#fig:numerical:noise" &gt;12&lt;/a&gt; below), care
is taken to estimate LAT in a robust manner by using an alternative
definition of LAT with two thresholds: It has another condition that
needs to be met for LAT to be updated. This condition is that
$V$ must first decrease below a second threshold
$V_*^\downarrow$ before an increase above the first
threshold $V_*$ is considered as depolarization at
the wave front and therefore as the trigger of an update of LAT. Unless
noted otherwise, we use the first definition of LAT with just one
threshold.&lt;/p&gt;
&lt;p&gt;The LAT relative to the current time is the elapsed time:
&lt;span &gt;$$
 t^{\text{elapsed}}= t - t^{\text{arrival}}
\qquad{(2)}$$&lt;/span&gt; In other words,
elapsed time is the time since the start of the last local activation.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;LAT phase&lt;/em&gt; ${\varphi}^{\text{LAT}}$ is just a
mapping of $t^{\text{elapsed}}$ onto the interval
$[0,2\pi)$ by applying a sigmoidal function:
&lt;span id="eq:numerical:phi_time"&gt;$$
 {\varphi}^{\text{LAT}}= 2\pi\tanh(t^{\text{elapsed}}/\tau)
\qquad{(3)}$$&lt;/span&gt; where
$\tau$ is the characteristic time of the cyclic
process. Here, we take $\tau$ equal to half of the
typical APD in the medium. Note that another sigmoid function instead of
$\tanh$ could also have been chosen in
Eq. &lt;a class="link" href="#eq:numerical:phi_time" &gt;3&lt;/a&gt;. The right column of
Fig. &lt;a class="link" href="#fig:numerical:phases" &gt;3&lt;/a&gt; visualizes
${\varphi}^{\text{LAT}}$ for the same four data sets.&lt;/p&gt;
&lt;p&gt;An asset of ${\varphi}^{\text{LAT}}$ is that the
curves of equal ${\varphi}^{\text{LAT}}$ are
precisely the isochrones that cardiologists work with during endocardial
catheter mapping. Also, if $\tau$ is chosen
appropriately, repolarized (recovered) tissue will have
${\varphi}^{\text{LAT}}\approx 2\pi$, such that this
phase is not changing abruptly at the wave front and wave back, in
contrast to ${\varphi}^{\text{act}}$. A disadvantage
of ${\varphi}^{\text{LAT}}$ is that it requires a
dense temporal sampling (either in simulation or experiment), since
otherwise staircase artifacts emerge. As a last remark, care should be
taken when initializing ${\varphi}^{\text{LAT}}$ at
the start of the observation window: If the previous LAT are unknown, so
is ${\varphi}^{\text{LAT}}$ until a propagating wave
has swept through the medium.&lt;/p&gt;
&lt;div id="sec:numerical:theory:defect"&gt;
&lt;h2 id="phase-singularities-pss-and-phase-defects-pds"&gt;Phase singularities (PSs) and phase defects (PDs)
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The analysis of spatial distributions of phase makes use of several
concepts of complex numbers and complex analysis (&lt;a class="link" href="#ref-arfken1995mathematical" &gt;Arfken &amp;amp; Weber,
1995&lt;/a&gt;), such as contours, PSs and branch
cuts. We now briefly review these concepts in the context of cardiac
excitation.&lt;/p&gt;
&lt;p&gt;The detection of rotor cores from a spatial map of phase can be
performed by calculating the total phase difference along a closed loop
(contour) ${\mathcal{C}}$ in the medium, usually
taken on the cardiac surface: &lt;span &gt;$$
 \Delta {\varphi}= \oint_{\mathcal{C}} d{\varphi}\qquad{(4)}$$&lt;/span&gt;
Since the first and last point have the same phase, the resulting phase
difference $\Delta {\varphi}$ will return an integer
multiple of $2\pi$. Hence, one defines the
topological charge circumscribed by the contour as:
&lt;span &gt;$$
 Q = \frac{\Delta {\varphi}}{2\pi} = \oint_{\mathcal{C}} \frac{d{\varphi}}{2\pi}
\qquad{(5)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now, in the classical theory (&lt;a class="link" href="#ref-gray1995nonstationary" &gt;Gray et al.,
1995&lt;/a&gt;), one assumes that the phase function
${\varphi}({{\bm{{x}}}})$ at a given time
$t$ is continuous nearly everywhere, except in a few
points where the phase is undefined. When using
${\varphi}^{\text{act}}$, it can be seen that these
points will correspond to $V=V_*, R=R_*$. In the
immediate vicinity of such points, all phases are present (both in the
$(V,R)$ plane and in the spatial phase map), hence
this point is called a phase singularity (PS). Note that the existence
of a PS, where all different phases touch, within the contour region
$\mathcal{C}$ is implied by the &lt;em&gt;assumption&lt;/em&gt; of the
original theory that the phase is a continuous function except at the
PS.&lt;/p&gt;
&lt;p&gt;In the generalized theory (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;;
&lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al., 2021&lt;/a&gt;), however, the phase is
allowed to be discontinuous near a conduction block line, which also
happens in the core of a linear-core spiral. Then, the contour
$\mathcal C$ cannot be shrunk to surround a single
point, without having the contour cross an interface where
${\varphi}$ changes abruptly. We call such transition
zones phase defects (PD): phase defect lines (PDLs) in 2D and phase
defect surfaces (PDSs) in 3D. The discontinuous behavior of phase is
more easily noted with ${\varphi}^{\text{LAT}}$ than
with ${\varphi}^{\text{act}}$, since
${\varphi}^{\text{act}}$ also shows strong gradients
near the wave front and wave back (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;). As a result, we are convinced that PS
detection algorithms that assume a continuous phase distribution are
behaving non-robustly near such spatial phase transition, which
motivates this work. Here, we will provide PD detection methods that are
explicitly discriminating the PD structures, either as a sharp line, or
in a probabilistic manner using PD density.&lt;/p&gt;
&lt;div id="sec:numerical:methods"&gt;
&lt;h1 id="methods"&gt;Methods
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:numerical:methods:data"&gt;&lt;/p&gt;
&lt;h2 id="data-generation-and-collection"&gt;Data generation and collection
&lt;/h2&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:numerical:methods:data:sim"&gt;&lt;/p&gt;
&lt;h3 id="numerical-methods-for-pattern-generation"&gt;Numerical methods for pattern generation
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The methods for PD detection developed here are designed to operate on
excitation patterns, regardless of their generation. However, we here
test the methods on numerical simulations in a cardiac monodomain
setting. That is, in a rectangular Cartesian grid, we modeled forward
evolution of a column matrix of state variables
$\bm{u}({{\bm{{x}}}},t)$ according to a
reaction-diffusion equation (&lt;a class="link" href="#ref-clayton2011review" &gt;Clayton et al.,
2011&lt;/a&gt;): &lt;span &gt;$$
 \partial_t \bm{u}= \bm{P} \Delta \bm{u}+ \bm{F}(\bm{u})
\qquad{(6)}$$&lt;/span&gt; Here, the first
component $u_1$ of $\bm{u}$ equals
the normalized transmembrane potential $u_1 = u = V$,
and $\bm{P} = \operatorname{diag}(1,0,...,0)$ in
order to enable wave propagation by diffusion of $u$.
The number of state variables in $\bm{u}$ varies
between the different mathematical models of cardiac myocytes, which are
encoded in non-linear reaction functions
$\bm{F}(\bm{u})$. To assess the reliability of our
methods, we tried several reaction kinetics: Linear cores are known to
occur with the Bueno-Orovio-Cherry-Fenton (BOCF) model for human
ventricles (&lt;a class="link" href="#ref-bueno2008model" &gt;Bueno-Orovio et al., 2008&lt;/a&gt;) with
parameter set &amp;lsquo;PB&amp;rsquo; mimicking Priebe and Beuckelmann kinetics (&lt;a class="link" href="#ref-priebe1998simulation" &gt;Priebe &amp;amp;
Beuckelmann, 1998&lt;/a&gt;), and with the
Fenton-Karma (FK) model (&lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma, 1998&lt;/a&gt;)
with modified Luo-Rudy I (MLR-I) parameters. In addition, we
investigated how the methods perform when operating on a circular spiral
wave core by applying them to the Aliev-Panfilov (AP) model (&lt;a class="link" href="#ref-aliev1996simple" &gt;Aliev &amp;amp;
Panfilov, 1996&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;All simulations were executed on a 2D isotropic square domain of
myocardial tissue using Neumann boundary conditions and a 5-point
stencil for the Laplacian. Integrating in time is done using forward
Euler stepping, with values per model given in
Table &lt;a class="link" href="#tbl:numerical:simulations" &gt;1&lt;/a&gt;. There, we also present the
typical APD values and other parameters that we use for the calculation
of the phases.&lt;/p&gt;
&lt;div id="tbl:numerical:simulations"&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="277px" data-flex-grow="115" height="599" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/parameters.png" width="692"&gt;&lt;/p&gt;
&lt;p&gt;Table 1: &lt;strong&gt;Overview of the performed experiments with relevant
parameters.&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The spiral wave was generated by applying a classical S1S2 protocol: The
western side of the square domain is initially excited to generate a
plane wave. When the central point of the medium has finished
repolarization, the south-western quarter of the domain behind the
traveling wave is stimulated, such that a spiral wave (cardiac rotor) is
formed. This protocol may also be applied rotated or mirrored.&lt;/p&gt;
&lt;p&gt;Three frames of the first model variable $u$ for each
of the three chosen models resulting from numerical simulation were
displayed in Fig. &lt;a class="link" href="#fig:numerical:u" &gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;div id="sec:numerical:methods:data:optical"&gt;
&lt;h3 id="optical-voltage-mapping-experiments"&gt;Optical voltage mapping experiments
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;To test our methods on in-vitro measurements, in contrast to the &lt;em&gt;in
silico&lt;/em&gt; simulations, we used optical voltage mapping data derived from
monolayers of conditionally immortalized human atrial myocytes (hiAMs)
following cardiomyogenic differentiation of these cells (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et
al., 2022&lt;/a&gt;). A voltage-sensitive dye is added to
the culture, after which a real-time recording can be made of the
intensity of emitted light, which is a measure of the local
transmembrane potential. For the used recordings, pixel size was and the
sampling time between frames was The full protocols for cellular
differentiation of hiAMs and the optical voltage mapping experiments can
be found in the previous publication (&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al.,
2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Gaussian smoothing with a kernel size of three grid points has been
applied to each frame. The data have been rescaled such that each grid
point has unit variance in time. Then, arbitrary units have been defined
such that the resting state corresponds to optical activity
$u$ equal to zero, and the excited state to
$u=1$. To calculate the LAT phase
${\varphi}^{\text{LAT}}$, we use a value of
$\text{APD} = {100~\mathrm{{m}{s}}}$. This
corresponds to a value in between the measured values of
$\text{APD}_{50} = {(36.4\ ±\ 7.7)~\mathrm{{m}{s}}}$
and
$\text{APD}_{80} = {(136\ ±\ 12)~\mathrm{{m}{s}}}$
(&lt;a class="link" href="#ref-harlaar2022hiam" &gt;Harlaar et al., 2022&lt;/a&gt;). Three frames of one of
these recordings can be seen in Fig. &lt;a class="link" href="#fig:numerical:u" &gt;1&lt;/a&gt; M-O.&lt;/p&gt;
&lt;p&gt;As a second variable for calculating
${\varphi}^{\text{act}}$ for this data set, we use
the time-delayed version of $u$ by which corresponds
to roughly of the duration of a rotation. The other parameters needed to
calculate the phases can be found in
Table &lt;a class="link" href="#tbl:numerical:simulations" &gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ethics statement&lt;/em&gt;. This study was conducted with approval of the
institutional review board of the Leiden University Medical Center
(P08.087) and in compliance with the International Code of Medical
Ethics of the World Medical Association.&lt;/p&gt;
&lt;div id="sec:numerical:methods:phiskew"&gt;
&lt;h2 id="a-third-phase-definition"&gt;A third phase definition
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The aforementioned phase definitions
${\varphi}^{\text{act}}$ and
${\varphi}^{\text{LAT}}$ have each their downsides:
Gradients in ${\varphi}^{\text{act}}$ not only show
PD but also wave fronts, and ${\varphi}^{\text{LAT}}$
requires intense sampling over time of the medium. We propose to combine
the advantages of ${\varphi}^{\text{act}}$ and
${\varphi}^{\text{LAT}}$ in a new phase,
${\varphi}^{\text{skew}}$. This phase is designed as
a computationally cheap approximation of the elapsed time phase
${\varphi}^{\text{LAT}}$ that can be calculated using
${\varphi}^{\text{act}}$. By construction, it does
not require the whole history of $V$, but can instead
be calculated using $(V,R)$ at one point in time. In
essence, ${\varphi}^{\text{skew}}$ is a
re-parameterization of ${\varphi}^{\text{act}}$:
&lt;span id="eq:numerical:phiskew"&gt;$$
 {\varphi}^{\text{skew}} = h({\varphi}^{\text{act}}), \;\;\; h(0) = 0, \;\;\; h(2\pi) = 2\pi
\qquad{(7)}$$&lt;/span&gt; where
$h$ is furthermore monotonically rising. Essentially,
the cycle visited by cells during the action potential is now labeled in
a more free manner than the classical polar coordinates in the
$(V,R)$-plane. As can be seen in
Fig. &lt;a class="link" href="#fig:numerical:phase:comparison" &gt;4&lt;/a&gt; by plotting
${\varphi}^{\text{act}}$
vs. ${\varphi}^{\text{LAT}}$,
${\varphi}^{\text{LAT}}$ is also a
re-parameterization of ${\varphi}^{\text{skew}}$.&lt;/p&gt;
&lt;div id="fig:numerical:phase:comparison"&gt;
&lt;p&gt;&lt;img alt="Correlation of the different phases" class="gallery-image" data-flex-basis="759px" data-flex-grow="316" height="669" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/phases_corr.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/phases_corr_hu_12f29a3852abda56.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/phases_corr_hu_88530c57cd4aa0af.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/phases_corr.png 2116w" width="2116"&gt;&lt;/p&gt;
&lt;p&gt;Figure 4: &lt;strong&gt;Correlation of the different phases.&lt;/strong&gt; Phase data have been
taken from the one snapshot in time of the Fenton-Karma simulation in
Fig. &lt;a class="link" href="#fig:numerical:phases" &gt;3&lt;/a&gt;. Points for two phase values with darker
shading correspond to higher logarithmic probability density. (A) The
LAT phase ${\varphi}^{\text{LAT}}$ stays close to
zero while the state space phase
${\varphi}^{\text{act}}$ is already increasing. It
then transitions to $2\pi$ much quicker and stays
relatively close to that value afterwards. (B) The skewed phase
${\varphi}^{\text{skew}}$ is designed as a
re-parameterization of the state space phase
${\varphi}^{\text{act}}$ such that it approximates
this behavior using a piecewise linear function. (C) The skewed phase
${\varphi}^{\text{skew}}$ correlates more with the
LAT phase ${\varphi}^{\text{LAT}}$, getting closer to
the dotted line where
${\varphi}^{\text{skew}}={\varphi}^{\text{LAT}}$.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In principle, one could fit a function $h$ to a plot
of ${\varphi}^{\text{LAT}}$
vs. ${\varphi}^{\text{act}}$, but we opt for a
different approach here and define a piece-wise linear function
$h$:
&lt;span id="eq:numerical:phi_skew"&gt;$$
 h({\varphi}) =
 \begin{cases}
 0 &amp; {\varphi}\in [0, {\varphi}_0] \\
 2\pi \frac{{\varphi}-{\varphi}_0}{{\varphi}_1-{\varphi}_0} &amp; {\varphi}\in ({\varphi}_0, {\varphi}_1) \\
 2\pi &amp; {\varphi}\in [{\varphi}_1, 2\pi]
 \end{cases}
\qquad{(8)}$$&lt;/span&gt; Values for
${\varphi}_0$ and ${\varphi}_1$
were manually chosen for the different reaction kinetics models used,
see section &lt;a class="link" href="#sec:numerical:theory:phase" &gt;2.1&lt;/a&gt; and
Table &lt;a class="link" href="#tbl:numerical:simulations" &gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Below, we will apply different PD detection methods on the three phases
${\varphi}^{\text{act}}$,
${\varphi}^{\text{LAT}}$ and
${\varphi}^{\text{skew}}$, to see which performs best
in visualizing PD structures.&lt;/p&gt;
&lt;div id="sec:numerical:methods:defects"&gt;
&lt;h2 id="phase-defect-detection-algorithms"&gt;Phase defect detection algorithms
&lt;/h2&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:numerical:methods:defects:requirements"&gt;&lt;/p&gt;
&lt;h3 id="requirements-for-phase-defect-detection-algorithms"&gt;Requirements for phase defect detection algorithms
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The aim of this paper is to provide and evaluate numerical methods that
can be used as a successor of classical PS detection algorithms, but
directed towards the detection of PDs instead. The following factors are
taken into account when proposing the methods.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Zero or finite thickness&lt;/em&gt;. Due to the formation of a physical boundary
layer (either by electrotonic effects or numerical smoothing, see (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno
et al., 2021&lt;/a&gt;)), a PD has a finite width in
practice. Therefore, we see two options. A first option is to see the PD
as an idealized structure with zero thickness, situated near the
steepest spatial variation of phase or a spatial discontinuity in the
LAT. A second option is to accommodate for the finite transition width,
and describe the PD in a probabilistic manner, e.g. by regarding the
phase gradient as a kind of PD density, below denoted as
$\rho$. If desired, the PDL extent can then be
determined by putting a threshold on $\rho$, a
process which becomes easier if this density is normalized between 0 and
1.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Vertex-based or edge-based detection&lt;/em&gt;. Our algorithms take phase data
on a set of nodes as input. We discriminate methods based on whether
their output is on the nodes, edges or faces of the grid. Since the PDs
have co-dimension one, it is natural to consider them as being situated
on edges of the computational grid, either in 2D or 3D. However, the
result of an edge-based method is not located on the original grid, such
that methods that return values on the vertices of the grid (i.e.
collocated with local phase data) can also be useful. Both edge-based
and vertex-based methods are in contrast with PS detection: since PS
have co-dimension 2, they are naturally calculated on the faces of the
grid (&lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma, 1998&lt;/a&gt;; &lt;a class="link" href="#ref-kuklik2014reconstruction" &gt;Kuklik et al.,
2014&lt;/a&gt;). Below, we provide for most PD
detection methods an edge-based and vertex-based variant. We currently
test our methods on a 2D Cartesian grid only and leave the extension to
3D and irregular meshes to future work.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Taking phase differences&lt;/em&gt;. Since phase is a cyclic variable, phase
differences should be taken with care. Spatial derivatives are
implemented in such a manner that an integer multiple of
$2\pi$ is added in order to bring the result as close
as possible to zero. Also trigonometric functions are adjusted such that
they are indifferent to $2\pi$ differences. In some
methods, the complex number
$z = e^{\mathrm i{\varphi}}$ is calculated and the
absolute value $|z|$ is taken afterwards to obtain
the phase instead of just using ${\varphi}$. This
will make sure that a large jump in phase is not just attributed to the
phase being cyclic.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Performance&lt;/em&gt;. In the results section
(section &lt;a class="link" href="#sec:numerical:results" &gt;4&lt;/a&gt;), the different algorithms are
compared in computational speed and relative performance. The location
of PDs depends on the choice of algorithms for phase and PD calculation.
To still make a comparison between methods possible, we designed an &lt;em&gt;in
silico&lt;/em&gt; experiment where the ground truth location of a PDL is known.&lt;/p&gt;
&lt;p&gt;In the remainder of this section, nine different PD localization methods
will be briefly presented. For the vertex-based algorithms, the output
is a discretized scalar field: a non-negative PD density
$\rho({{\bm{{x}}}},t)$ at time $t$
that is defined in the points where phase is available to calculate the
defect from (here either
${\varphi}^{\text{act}}, {\varphi}^{\text{LAT}}$ or
${\varphi}^{\text{skew}}$). For the edge-based
algorithms, the output is a number $\sigma_{ab}$
computed from the pair of phases
${\varphi}_a = {\varphi}({{\bm{{x}}}}_a)$,
${\varphi}_b = {\varphi}({{\bm{{x}}}}_b)$ found at
the vertices connected by that edge, which could be regarded as making
up a vector field.&lt;/p&gt;
&lt;div id="sec:numerical:methods:defects:interpol"&gt;
&lt;h3 id="interpolation-between-vertex-based-and-edge-based-methods"&gt;Interpolation between vertex-based and edge-based methods
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;In what follows,
${{\bm{{x}}}}_a, {{\bm{{x}}}}_b, ...$ are positions
of vertices $a$ and $b$,
$\rho_a =\rho({{\bm{{x}}}}_a)$,
${\varphi}_a = {\varphi}({{\bm{{x}}}}_a)$ and
$\sigma_{ab}$ is a quantity defined on the edge of
the mesh between ${{\bm{{x}}}}_a$ and
${{\bm{{x}}}}_b$. The set of neighbor vertices
connected to vertex $a$ is
$\mathcal{N}(a)$, containing $N_a$
elements. In a 2D Cartesian grid, $N_a = 4$ inside
the medium, but on the boundary of the domain or near obstacles, this
value will be lower. In this case, the following formulas can still be
applied with lower $N_a$. In a 3D Cartesian grid,
$N_a = 6$. See Fig. &lt;a class="link" href="#fig:numerical:edgevertex" &gt;5&lt;/a&gt;
for graphical depiction of $\rho_a$ and
$\sigma_{ab}$ on a portion of a Cartesian grid.&lt;/p&gt;
&lt;div id="fig:numerical:edgevertex"&gt;
&lt;p&gt;&lt;img alt="Overview of vertex- and edge-centered quantities" class="gallery-image" data-flex-basis="360px" data-flex-grow="150" height="300" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/edge_vertex.py.png" width="450"&gt;&lt;/p&gt;
&lt;p&gt;Figure 5: &lt;strong&gt;Overview of vertex- and edge-centered quantities.&lt;/strong&gt; For
vertices $a$ and $b$ at positions
${{\bm{{x}}}}_a$ and
${{\bm{{x}}}}_b$, for which the phase
${\varphi}$ has been calculated, we denote by
$\rho_a$ the vertex-centered PD density, and
$\rho_b$, respectively. For the edge
$a\leftrightarrow b$ between the two vertices
$a$ and $b$, we denote the
edge-centered PD density by $\sigma_{ab}$. The
vertices that $a$ is connected to are
$a$&amp;rsquo;s neighbourhood
$\mathcal N(a)$.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;If a quantity arises naturally along an edge (e.g. a gradient), it can
be interpolated onto the vertex grid using
&lt;span id="eq:numerical:sigma:to:rho"&gt;$$
 \rho_a = \frac{1}{N_a} \sum_{b \in \mathcal{N}(a)} \sigma_{ab}
\qquad{(9)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Conversely, if a quantity is found at vertices, it can be allocated to
the edges using linear interpolation:
&lt;span id="eq:numerical:rho:to:sigma"&gt;$$
 \sigma_{ab} = \frac{1}{2} (\rho_a + \rho_b)
\qquad{(10)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;To distinguish between methods, the name of the method will be added in
superscript, e.g. $\sigma^\text{CM}$,
$\rho^\text{PC}$, etc.&lt;/p&gt;
&lt;div id="sec:numerical:methods:defects:overview"&gt;
&lt;h3 id="overview-of-phase-defect-detection-algorithms"&gt;Overview of phase defect detection algorithms
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;In the following, we will present several different methods to detect
PDs. A tabular overview of all the methods is given in
Table &lt;a class="link" href="#tbl:numerical:overview" &gt;2&lt;/a&gt;.&lt;/p&gt;
&lt;div id="tbl:numerical:overview"&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;strong&gt;abbr.&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;name&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;rationale&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;centered&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;calc. time&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;source&lt;/strong&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;CM&lt;/td&gt;
 &lt;td&gt;Cosine Method&lt;/td&gt;
 &lt;td&gt;Jumps in phase mod $2\pi$ are okay, in between: PDL.&lt;/td&gt;
 &lt;td&gt;on edges&lt;/td&gt;
 &lt;td&gt;${3.74~\mathrm{s}}$&lt;/td&gt;
 &lt;td&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;GLAT&lt;/td&gt;
 &lt;td&gt;Gradient of Local Activation Time&lt;/td&gt;
 &lt;td&gt;LAT jumps at PDL and wave front.&lt;/td&gt;
 &lt;td&gt;on edges&lt;/td&gt;
 &lt;td&gt;${2.13~\mathrm{s}}$&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RPG&lt;/td&gt;
 &lt;td&gt;Real Phase Gradient&lt;/td&gt;
 &lt;td&gt;Phase jumps at PDL.&lt;/td&gt;
 &lt;td&gt;on edges&lt;/td&gt;
 &lt;td&gt;${4.90~\mathrm{s}}$&lt;/td&gt;
 &lt;td&gt;&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CPG&lt;/td&gt;
 &lt;td&gt;Complex Phase Gradient&lt;/td&gt;
 &lt;td&gt;Phase jumps at PDL.&lt;/td&gt;
 &lt;td&gt;on edges&lt;/td&gt;
 &lt;td&gt;${13.31~\mathrm{s}}$&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PC&lt;/td&gt;
 &lt;td&gt;Phase Coherence&lt;/td&gt;
 &lt;td&gt;Phase is not coherent at PDL.&lt;/td&gt;
 &lt;td&gt;on edges&lt;/td&gt;
 &lt;td&gt;${10.03~\mathrm{s}}$&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DM&lt;/td&gt;
 &lt;td&gt;Dipole Moment&lt;/td&gt;
 &lt;td&gt;Points on opposite side of PDL have opposite &amp;ldquo;charge&amp;rdquo;.&lt;/td&gt;
 &lt;td&gt;on vertices&lt;/td&gt;
 &lt;td&gt;${13.74~\mathrm{s}}$&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SVF&lt;/td&gt;
 &lt;td&gt;Spatial Vector Field&lt;/td&gt;
 &lt;td&gt;Rotation of gradient is close to zero, except at PDL.&lt;/td&gt;
 &lt;td&gt;on vertices&lt;/td&gt;
 &lt;td&gt;${8.37~\mathrm{s}}$&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AM&lt;/td&gt;
 &lt;td&gt;Angular Momentum&lt;/td&gt;
 &lt;td&gt;Use the classical topological charge also known as angular momentum.&lt;/td&gt;
 &lt;td&gt;on vertices&lt;/td&gt;
 &lt;td&gt;${1.47~\mathrm{s}}$&lt;/td&gt;
 &lt;td&gt;&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;IPM&lt;/td&gt;
 &lt;td&gt;Inflection Point Method&lt;/td&gt;
 &lt;td&gt;Change of sign of the phase Hessian.&lt;/td&gt;
 &lt;td&gt;on edges&lt;/td&gt;
 &lt;td&gt;${10.62~\mathrm{s}}$&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Table 2: &lt;strong&gt;Overview of existing and proposed algorithms for PD
detection.&lt;/strong&gt; Calculation times are for 500 frames in a medium of
$450\times 450$ pixels on an Intel Core i7-10875H
processor in a Numpy implementation without specific optimization for
speed.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="cosine-method-cm"&gt;&lt;/p&gt;
&lt;h4 id="cosine-method-cm"&gt;Cosine method (CM)
&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Tomii et al. (&lt;a class="link" href="#ref-tomii2021spatial" &gt;2021&lt;/a&gt;) introduced the following
quantity to visualize PDs along an edge:
&lt;span &gt;$$
 \tilde\sigma_{ab}^\text{CM} = \cos({\varphi}_a - {\varphi}_b)
\qquad{(11)}$$&lt;/span&gt; This method returns a
value in $[-1,1]$, where low values indicate the
presence of a PD.&lt;/p&gt;
&lt;p&gt;To derive a normalized PD density with values in
$[0,1]$, we modify this to:
&lt;span id="eq:numerical:cos:norm"&gt;$$
 \sigma_{ab}^\text{CM} = \frac{1}{2}[1 - \cos({\varphi}_a - {\varphi}_b)]
\qquad{(12)}$$&lt;/span&gt; We define a
vertex-based version of this quantity via
Eq. &lt;a class="link" href="#eq:numerical:sigma:to:rho" &gt;9&lt;/a&gt;, which we denote with
$\rho_a^\text{CM}$.&lt;/p&gt;
&lt;div id="gradient-of-local-activation-time-glat"&gt;
&lt;h4 id="gradient-of-local-activation-time-glat"&gt;Gradient of local activation time (GLAT)
&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;It is expected that around a PD, the LAT does not vary smoothly but
instead jumps across this line. This implies that the gradient in the
neighbourhood of the PDL should be much larger than further away where
neighbouring vertices are activated subsequently.&lt;/p&gt;
&lt;p&gt;This relation is easily expressed using edges:
&lt;span id="eq:numerical:GLATedge"&gt;$$
 \sigma_{ab}^\text{GLAT} = t^{\text{arrival}}({{\bm{{x}}}}_a) - t^{\text{arrival}}({{\bm{{x}}}}_b)
\qquad{(13)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Note that we are using a second condition here: If the elapsed time
since excitation of either vertices is exactly zero, we still set
$\sigma_{ab}^\text{GLAT}$ to zero. The rationale here
is that the jump is due to the wave front passing instead of pointing to
a PD.&lt;/p&gt;
&lt;p&gt;A vertex-based variant is found by averaging over all edges leaving the
same vertex, see Eq. &lt;a class="link" href="#eq:numerical:sigma:to:rho" &gt;9&lt;/a&gt;, applied to the
absolute value of the LAT difference:
&lt;span &gt;$$
 \rho^\text{GLAT}_a = \frac{1}{N_a} \sum_{b \in \mathcal{N}(a)} |\sigma^\text{GLAT}_{ab}|
\qquad{(14)}$$&lt;/span&gt;&lt;/p&gt;
&lt;div id="real-phase-gradient-rpg"&gt;
&lt;h4 id="real-phase-gradient-rpg"&gt;Real phase gradient (RPG)
&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;In previous work (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;), we
considered phase gradients, disregarding $2\pi$ phase
differences: &lt;span &gt;$$
 \sigma_{ab}^\text{RPG}
 = | \operatorname{mod}({\varphi}_a-{\varphi}_b+\pi, 2\pi) - \pi |
\qquad{(15)}$$&lt;/span&gt; returning values in
$[-\pi,\pi]$. The normalized cosine method
(Eq. &lt;a class="link" href="#eq:numerical:cos:norm" &gt;12&lt;/a&gt;) can be seen as a mapping of this
interval to a PD density taking values in $[0,1]$.&lt;/p&gt;
&lt;div id="complex-phase-gradient-cpg"&gt;
&lt;h4 id="complex-phase-gradient-cpg"&gt;Complex phase gradient (CPG)
&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;The next method works in a similar fashion, but to avoid the modulo
operation, we look for gradients in the complex number
$z = \mathrm e^{\mathrm i {\varphi}}$:
&lt;span &gt;$$
 \sigma_{ab}^\text{CPG} = | e^{i{\varphi}_a} - e^{i{\varphi}_b} |
\qquad{(16)}$$&lt;/span&gt; From this a
vertex-based density can be computed using
Eq. &lt;a class="link" href="#eq:numerical:sigma:to:rho" &gt;9&lt;/a&gt;.&lt;/p&gt;
&lt;div id="phase-coherence-pc"&gt;
&lt;h4 id="phase-coherence-pc"&gt;Phase coherence (PC)
&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Inspired by the literature of phase oscillators (&lt;a class="link" href="#ref-kuramoto1984chemical" &gt;Kuramoto,
1984&lt;/a&gt;), we define the phase coherence of a
vertex $a$ with neighbours $b$ as:
&lt;span &gt;$$
 p_a = \frac{1}{N_a} \left| \sum_{b \in \mathcal{N}(a)} e^{i {\varphi}_b} \right|
\qquad{(17)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The PD density is then defined as &lt;span &gt;$$
 \rho_a^\text{PC} = 1 - p_a
\qquad{(18)}$$&lt;/span&gt; such that
$\rho$ is large when the coherence is low, since a
low phase coherence is expected near a PDL. This index
$\rho^\text{PC}$ is normalized in
$[0,1]$ with large values indicating high PD
probability.&lt;/p&gt;
&lt;p&gt;Note that applying the PC method to only two vertices connected via an
edge delivers &lt;span &gt;$$
 \sigma_{ab}^\text{PC} = \frac{1}{2} |e^{i{\varphi}_a} + e^{i{\varphi}_b}|
\qquad{(19)}$$&lt;/span&gt; returning
$\sqrt{1+\tilde{\sigma}^{CM}_{ab}}$.&lt;/p&gt;
&lt;div id="dipole-moment-dm"&gt;
&lt;h4 id="dipole-moment-dm"&gt;Dipole moment (DM)
&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Along a PD, the phase values that surround a given point are expected to
be divided into two groups, one on either side of the PDL. We could
perhaps detect this splitting by using the concept of the dipole moment
of a charge distribution, where the complex number
$z = \mathrm e^{\mathrm i {\varphi}}$ takes the role
of charge: &lt;span id="eq:numerical:dipole"&gt;$$
 {{\bm{{p}}}}_a = {{\bm{{p}}}}({{\bm{{x}}}}_a) = \sum_{{{\bm{{x}}}}_b\in\mathcal N(a)} [ {{\bm{{x}}}}_b - {{\bm{{x}}}}_a ] e^{i {\varphi}_b}
\qquad{(20)}$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The point-based PD density is then found by taking the norm of this
complex vector:
&lt;span id="eq:numerical:DM"&gt;$$
 \rho^\text{DM}_a = ||{{\bm{{p}}}}_a || = \sqrt{{{\bm{{p}}}}_a^* \cdot {{\bm{{p}}}}_a}
\qquad{(21)}$$&lt;/span&gt; where
$^*$ denotes complex conjugation.&lt;/p&gt;
&lt;p&gt;When two vertices are connected by one edge, the edge-based
implementation will recreate the CPG method. For this reason, no direct
implementation of the latter was done. Still, edge-based values can be
computed via interpolation, see Eq. &lt;a class="link" href="#eq:numerical:rho:to:sigma" &gt;10&lt;/a&gt;.&lt;/p&gt;
&lt;div id="spatial-vector-field-svf"&gt;
&lt;h4 id="spatial-vector-field-svf"&gt;Spatial vector field (SVF)
&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;When Stokes&amp;rsquo; law is applied to the expression of topological charge, one
finds &lt;span id="eq:numerical:stokes"&gt;$$
 Q = \int_C \nabla {\varphi}\cdot {{\bm{{d\ell}}}} = \iint_S \nabla \times \nabla {\varphi}\cdot {{\bm{{ds}}}}
\qquad{(22)}$$&lt;/span&gt; where
$C$ is the boundary curve to the region
$S$. Since for a continuous field
${\varphi}$, the rotation of the gradient
$\nabla \times \nabla {\varphi}$ vanishes everywhere,
a continuous phase field cannot bear non-zero topological charge.
Nevertheless, computing $Q$ for all faces of the grid
has been used to find PSs (&lt;a class="link" href="#ref-gray1995nonstationary" &gt;Gray et al.,
1995&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Inspired by the right-hand side of Eq. &lt;a class="link" href="#eq:numerical:stokes" &gt;22&lt;/a&gt;, and
replacing ${\varphi}$ by
$z=e^{i{\varphi}}$ to get easier differentiation, we
propose: &lt;span id="eq:numerical:svf"&gt;$$
 \rho^\text{SVF} = || \nabla \times \nabla z ||
\qquad{(23)}$$&lt;/span&gt; The motivation for
this method is that a PD is essentially a discontinuity in the field
${\varphi}$. At such a discontinuity the rotation of
the gradient may be different from zero. In our current implementation,
we calculate the gradient in a vertex-based manner, e.g.
$\partial_x u(x,y) = [u(x+dx,y) - u(x-dx,y)]/(2dx)$,
such that the result is also vertex-based.&lt;/p&gt;
&lt;div id="angular-momentum-am"&gt;
&lt;h4 id="angular-momentum-am"&gt;Angular momentum (AM)
&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;A classical method to detect the central region in a spiral wave is
using the pseudo-vector: (&lt;a class="link" href="#ref-winfree1996quantitative" &gt;Winfree et al.,
1996&lt;/a&gt;)
&lt;span id="eq:numerical:angular_momentum"&gt;$$
 {{\bm{{l}}}} = \nabla V \times \nabla R
\qquad{(24)}$$&lt;/span&gt; Far away from the
spiral core, the activation resembles a plane wave, making
$\nabla V$ nearly parallel to
$\nabla R$, such that
${{\bm{{l}}}} \approx {{\bm{{0}}}}$ except near the
core of the spiral. Since PS can be seen as a limit of a PDL with
vanishing length, we will visualize
&lt;span id="eq:numerical:AM"&gt;$$
 \rho^\text{AM} = || {{\bm{{l}}}} ||
\qquad{(25)}$$&lt;/span&gt; An edge-based method
can be derived by taking: &lt;span &gt;$$
 \sigma_{ab}^\text{AM} = (\rho_a^\text{AM} + \rho_b^\text{AM})/2
\qquad{(26)}$$&lt;/span&gt;&lt;/p&gt;
&lt;div id="inflection-point-method-ipm"&gt;
&lt;h4 id="inflection-point-method-ipm"&gt;Inflection point method (IPM)
&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;Given that a PDL in practice connects two regions of different phase in
an abrupt but continuous manner, it is interesting to look where the
phase transition is the steepest, and localize the PD there.&lt;/p&gt;
&lt;p&gt;For 1D functions, an inflection point is found where
$f'(x)$ changes sign. This can be translated to the
condition $f''(x) = 0$. To find the same region for a
2D function, we express that we want an inflection point when stepping
in the direction of the local phase gradient. With
${{\bm{{e}}}}_g$ as the normalized gradient vector:
&lt;span &gt;$$
 \nabla {\varphi}= {{\bm{{g}}}} = g {{\bm{{e}}}}_g
\qquad{(27)}$$&lt;/span&gt; the spatial
derivative in the gradient direction is
$\partial_g = {{\bm{{e}}}}_g \cdot \nabla$. With
this, $\partial_g{\varphi}= g$, and the concavity in
the direction of the gradient becomes:
&lt;span id="eq:numerical:inflection"&gt;$$
 F({{\bm{{x}}}}) = \sum_{i,j} g^i g^j \partial^2_{ij} {\varphi}= \sum_{i,j} g^i g^j H_{ij}
\qquad{(28)}$$&lt;/span&gt; where the Hessian of
the phase is $H_{ij} = \partial^2_{ij} {\varphi}$.
Hence, the PD can be found as the set of points where
$F({{\bm{{x}}}}) =0$. This method is unlike the
mentioned algorithms above, since it immediately returns a line,
i.e. PDL of zero thickness. Note that in practice, one needs to impose a
minimal value of $||\rho^{GLAT}||$ such that the
background region with low PDL density is filtered out.&lt;/p&gt;
&lt;p&gt;To compare this method to the other algorithms, we color the edges where
$F({{\bm{{x}}}})$ changes sign with the phase
gradient along that edge, i.e.
&lt;span id="eq:numerical:sigma:inflection"&gt;$$
 \sigma_{ab} = \sigma^{RPG}_{ab}\ H[ - F({{\bm{{x}}}}_a) F({{\bm{{x}}}}_b) ]
\qquad{(29)}$$&lt;/span&gt; with the Heaviside
function $H$, which takes the value 1 for inputs
larger than zero and 0 otherwise.&lt;/p&gt;
&lt;div id="sec:numerical:methods:visual"&gt;
&lt;h2 id="visual-representation-of-the-methods"&gt;Visual representation of the methods
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;For the methods that return a vertex-based PD density
$\rho$, we simply color the pixels in the rectangular
grid according to $\rho$. For the methods that return
an edge-based PD indicator $\sigma$, we color the
dual grid, i.e. we color every point in the plane according to its
nearest edge. This results in a coloring of the plane using pixels that
are 45 ° tilted and centered around the midpoint of edges in the
original grid. In this way, interpolation between edges and vertices
does not affect the presented results.&lt;/p&gt;
&lt;div id="sec:numerical:methods:post"&gt;
&lt;h2 id="post-processing-of-phase-defects"&gt;Post-processing of phase defects
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Having obtained a PD density $\rho({{\bm{{x}}}})$
using one of the methods, we keep only points above a threshold value
$\rho_c$ to obtain a set of points on the PDL, and
connect it using the minimal spanning tree graph algorithm. Thereafter,
the smallest branches of each tree are cut to gain a discrete
representation of a PDL, centered at the vertices of the image grid.&lt;/p&gt;
&lt;p&gt;To measure PDL length $L$, the PDL points are
connected by line segments; the sum of their lengths is taken as an
estimate to the PDL length.&lt;/p&gt;
&lt;p&gt;To measure PDL precession speed, we first selected a spatial region
where only one PDL was seen during the timespan of interest. Then, we
performed principal component analysis (PCA) to the point cloud of the
PDL at all time instances to obtain the main vector of alignment
${{\bm{{e}}}}_1$. The angle between this vector and
the positive $x$-axis is taken to be
$\beta$, after which linear regression of
$\beta(t) = \beta(0) + \omega t$ yields an estimate
for the precession frequency $\omega$ and the
precession period $T = \frac{2\pi}{\omega}$.&lt;/p&gt;
&lt;div id="sec:numerical:performance:tests"&gt;
&lt;h2 id="performance-tests"&gt;Performance tests
&lt;/h2&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:numerical:methods:noise"&gt;&lt;/p&gt;
&lt;h3 id="data-sets-with-gaussian-additive-noise"&gt;Data sets with Gaussian additive noise
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The data sets we are working with in this paper are quite smooth in the
sense that there is very little noise in them. This is due to the data
from in-silico simulations being smooth by design and the optical
voltage mapping data being pre-processed with Gaussian smoothing before
calculating the phase and phase defects
(section &lt;a class="link" href="#sec:numerical:methods:data:optical" &gt;3.1.2&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;To gauge how well the algorithms are able to deal with noise, we have
added noise following a normal distribution with different signal to
noise ratios (SNRs) to the data sets.&lt;/p&gt;
&lt;p&gt;In the context of our work, we define SNR as the ratio of the standard
deviation of the signal $u$ to the standard deviation
of the noise $n$
&lt;span &gt;$$
 \text{SNR}
 =
 \frac{\operatorname{stddev}{u}}{\operatorname{stddev}{n}}
 =
 \frac{\sqrt{{{\left\langle (u - {{\left\langle u \right\rangle}})^2 \right\rangle}}}}{\sqrt{{{\left\langle (n - {{\left\langle n \right\rangle}})^2 \right\rangle}}}}
\qquad{(30)}$$&lt;/span&gt; with
${{\left\langle f \right\rangle}}= \sum_{k=1}^N f({{\bm{{x}}}}_k, t_k)$
on all $N$ points of the space-time grid.&lt;/p&gt;
&lt;div id="sec:numerical:methods:lowres"&gt;
&lt;h3 id="data-sets-at-lower-spatial-resolution"&gt;Data sets at lower spatial resolution
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;In many contexts, the only available data are at much lower spatial
resolution than the in-silico simulations and optical mapping
experiments considered in this work. For instance, there are electrode
arrays that are inserted via balloon catheters with 64 electrodes
(&lt;a class="link" href="#ref-schilling1998simultaneous" &gt;Schilling et al., 1998&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;To still be able to assess the effectiveness of the phase and PD
algorithms at such resolutions, we down-sample our data by a factor of
$N\in\mathbb N$ by pooling
$N\times N$ grid points together using the arithmetic
mean. Vertices that are not inside the medium are not included in this
mean.&lt;/p&gt;
&lt;div id="sec:numerical:methods:forcePDL"&gt;
&lt;h3 id="data-sets-recovery-of-an-obstacle"&gt;Data sets: recovery of an obstacle
&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;There is no ground truth in the exact location of the PD as it depends
on the choice of algorithms for phase and PD calculation. Still,
experiments are possible where the expected location of a PDL is known.
We have conducted such an experiment in-silico where we add an
elongated, thin obstacle for a rotor to attach to.&lt;/p&gt;
&lt;p&gt;For this, we have taken the last frame from the experiment using the FK
model as the initial state of this experiment and placed such an
obstacle at the core of the observed rotor.&lt;/p&gt;
&lt;p&gt;For the length of the obstacle, we have chosen roughly the previously
observed PDL length. We choose its width to be less than eight grid
lengths $8\Delta x$, such that when we downsample the
data by a factor of eight as in
section &lt;a class="link" href="#sec:numerical:methods:lowres" &gt;3.6.2&lt;/a&gt;, all pixels in the medium
are again active. To put it briefly, the obstacle is designed such that
it is too thin to be detected directly at that lower spatial resolution.
Instead, we use phase defect detection to recover the obstacle.&lt;/p&gt;
&lt;p&gt;For this experiment, we used the parameters for the FK model as in
Table &lt;a class="link" href="#tbl:numerical:simulations" &gt;1&lt;/a&gt;, except for the time step
$\Delta t = {0.1~\mathrm{{m}{s}}}$ and duration&lt;/p&gt;
&lt;p&gt;To recover the obstacle from the simulation, we have used the different
phase and PD algorithms to calculate PD densities
$\rho({{\bm{{x}}}}, t)$. Recall that all methods are
designed such that high $\rho({{\bm{{x}}}}, t)$
corresponds to high likelihood of a PD being located there. We calculate
a prediction of the location of the obstacle
$\chi({{\bm{{x}}}})$ based on
$\rho({{\bm{{x}}}}, t)$ as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;For a duration of at least one rotation of the spiral, calculate the
mean value of the PD density
$\rho({{\bm{{x}}}}, t)$ at each point in space.
Call this quantity $\bar\rho({{\bm{{x}}}})$.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As $\rho({{\bm{{x}}}}, t)$ is close to zero
except for at the phase defect, the distribution of values in
$\bar\rho({{\bm{{x}}}})$ will also be heavily
skewed towards lower values. Therefore, we clip
$\bar\rho({{\bm{{x}}}})$ to the interval from the
40th percentile to the 99th percentile to get rid of both small
fluctuations around zero and outliers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To obtain $\chi({{\bm{{x}}}})$, we finally
rescale to the interval $[0,1]$ and then round to
$\{0,1\}$. This quantity can be thought of as an
approximation of the characteristic function
$\hat\chi({{\bm{{x}}}})$ of the set of points in
the obstacle.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Finally, to be able to judge how well the obstacle has been recovered,
we calculate the classification error as the fraction of misclassified
points by the prediction $\chi({{\bm{{x}}}})$ with
respect to the ground truth $\hat\chi({{\bm{{x}}}})$.&lt;/p&gt;
&lt;div id="sec:numerical:results"&gt;
&lt;h1 id="results"&gt;Results
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;We here apply the different proposed detection methods for the three
phases ${\varphi}^{\text{act}}$,
${\varphi}^{\text{LAT}}$, and
${\varphi}^{\text{skew}}$. We do this in three
cardiac monodomain models and compare performance of the methods
(section &lt;a class="link" href="#sec:numerical:methods:data:sim" &gt;3.1.1&lt;/a&gt;). Finally, we apply a
selection of methods to an experimental dataset obtained by optical
voltage mapping of a monolayer culture of cardiac cells
(section &lt;a class="link" href="#sec:numerical:methods:data:optical" &gt;3.1.2&lt;/a&gt;).&lt;/p&gt;
&lt;div id="sec:numerical:results:phase"&gt;
&lt;h2 id="comparison-of-different-phase-definitions"&gt;Comparison of different phase definitions
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Fig. &lt;a class="link" href="#fig:numerical:phases" &gt;3&lt;/a&gt; shows the three phase definitions
applied to a snapshot of the three monodomain models, the Aliev-Panfilov
(AP) model (&lt;a class="link" href="#ref-aliev1996simple" &gt;Aliev &amp;amp; Panfilov, 1996&lt;/a&gt;), the
Fenton-Karma (FK) model (&lt;a class="link" href="#ref-fenton1998vortex" &gt;Fenton &amp;amp; Karma, 1998&lt;/a&gt;),
the Bueno-Orovio-Cherry-Fenton (BOCF) model (&lt;a class="link" href="#ref-bueno2008model" &gt;Bueno-Orovio et al.,
2008&lt;/a&gt;), and an optical voltage mapping experiment.&lt;/p&gt;
&lt;p&gt;The AP model shown in the first row of Fig. &lt;a class="link" href="#fig:numerical:phases" &gt;3&lt;/a&gt;
produces a rigidly rotating spiral. With
${\varphi}^{\text{act}}$ and
${\varphi}^{\text{skew}}$, a PS is seen. However, due
to the thresholding on $V$ used to determine LAT, the
inner part of the core region is never excited, such that
${\varphi}^{\text{LAT}}$ shows an abrupt change at
the trajectory of the classical PS, which will be picked up as a PD
below.&lt;/p&gt;
&lt;p&gt;In the simulations with linear core (FK and BOCF models),
${\varphi}^{\text{act}}$ shows sudden transitions at
the rotor core and the wave front, while
${\varphi}^{\text{skew}}$ and
${\varphi}^{\text{LAT}}$ only show a distinct phase
gradient near the conduction block line.&lt;/p&gt;
&lt;p&gt;The optical voltage mapping experiment in
Fig. &lt;a class="link" href="#fig:numerical:phases" &gt;3&lt;/a&gt; J-L shows apparent PSs for
${\varphi}^{\text{act}}$ and
${\varphi}^{\text{skew}}$, but an extended PD for
${\varphi}^{\text{LAT}}$. Hence, at first sight, it
resembles the AP spiral, but this relation will be further investigated
below using the PD detection techniques outlined above.&lt;/p&gt;
&lt;p&gt;Fig. &lt;a class="link" href="#fig:numerical:phase:comparison" &gt;4&lt;/a&gt; shows a scatter plot between
the different phases for the FK frame shown in
Fig. &lt;a class="link" href="#fig:numerical:phases" &gt;3&lt;/a&gt;. We took the convention that the phase
at the resting state is 0. The skewed phase
${\varphi}^{\text{skew}}$ with parameters tuned as
outlined above resembles the elapsed time phase
${\varphi}^{\text{LAT}}$ much closer than the state
space phase ${\varphi}^{\text{act}}$. In short,
${\varphi}^{\text{skew}}$ is an approximation to
${\varphi}^{\text{LAT}}$ that does not require
observation of the system during the previous excitation sequence.&lt;/p&gt;
&lt;div id="sec:numerical:results:defect"&gt;
&lt;h2 id="comparison-of-phase-defect-detection-methods-in-simulations"&gt;Comparison of phase defect detection methods in simulations
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;We have applied all PD detection methods
(section &lt;a class="link" href="#sec:numerical:methods:defects" &gt;3.3&lt;/a&gt;) to all experiments, for
all phases. For definiteness, we only show the result for the FK model
in Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt; and Fig. &lt;a class="link" href="#fig:numerical:rhoFK2" &gt;7&lt;/a&gt;,
but the others can be found in the Supplementary Materials
(Fig. &lt;a class="link" href="#fig:numerical:rhoAP1" &gt;17&lt;/a&gt;, Fig. &lt;a class="link" href="#fig:numerical:rhoAP2" &gt;18&lt;/a&gt;,
Fig. &lt;a class="link" href="#fig:numerical:rhoBOCF1" &gt;19&lt;/a&gt;, and
Fig. &lt;a class="link" href="#fig:numerical:rhoBOCF2" &gt;20&lt;/a&gt;).&lt;/p&gt;
&lt;div id="fig:numerical:rhoFK1"&gt;
&lt;p&gt;&lt;img alt="Overview of PD detection methods for one snapshot of the FK data set" class="gallery-image" data-flex-basis="206px" data-flex-grow="85" height="2525" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phase_68.0.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phase_68.0_hu_e312a24f59c0a75c.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phase_68.0_hu_b7b27b8cf874220e.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phase_68.0.png 2169w" width="2169"&gt;&lt;/p&gt;
&lt;p&gt;Figure 6: &lt;strong&gt;Overview of PD detection methods for one snapshot of the FK
data set.&lt;/strong&gt; The PD on vertices $\rho$ or edges
$\sigma$ is measured in arbitrary units. The same
coloring as in Fig. &lt;a class="link" href="#fig:numerical:process" &gt;2&lt;/a&gt; C is used here. As the
PDL has a width of only a few grid points, we zoom in around the turning
point to get a better view of the structure on the grid. For reference,
we also show the corresponding frame of the transmembrane voltage
$V = u$ in panel A.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="fig:numerical:rhoFK2"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Overview of more PD detection methods for one snapshot of the FK data set as in Fig.\u00a06" class="gallery-image" data-flex-basis="209px" data-flex-grow="87" height="2496" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phase_68.1.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phase_68.1_hu_b41e318c2d40ce44.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phase_68.1_hu_30123a42e61e4b7a.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phase_68.1.png 2176w" width="2176"&gt;&lt;/p&gt;
&lt;p&gt;Figure 7: &lt;strong&gt;Overview of more PD detection methods for one snapshot of
the FK data set as in Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt;.&lt;/strong&gt; Each row shows
a detection algorithm, applied to the three different phase definitions.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In the following, we will present a selection of the results exhibiting
the common features and our main observations regarding the different
methods.&lt;/p&gt;
&lt;p&gt;In general, all methods return low densities away from the wave front
and PDL and higher values near the region of interest, although the
precise PD density distribution is different between the methods.&lt;/p&gt;
&lt;p&gt;In Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt; B, the GLAT method clearly shows the
conduction block line at the rotor core. Since LAT is discontinuous
there, the set of points is thin such that small gaps can be seen. At
the rightmost part, the PDL doubles, since the process of reaching and
leaving the rightmost turning point, both leave a discontinuity in LAT.
Moreover, the PDL&amp;rsquo;s precise location depends on the chosen threshold
$V_*$.&lt;/p&gt;
&lt;p&gt;The AM method (Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt; C) locates only the site
where the wave front meets on the PDL. Also it can be seen that
$\rho^\text{AM}$ is located at the wave front, though
with much lower magnitude. This is consistent with this method
traditionally being used for PS detection.&lt;/p&gt;
&lt;p&gt;The other methods in Figs. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt;,
&lt;a class="link" href="#fig:numerical:rhoFK2" &gt;7&lt;/a&gt; are phase-based. In each case, the wave front
is most clearly seen as an artifact using
${\varphi}^{\text{act}}$, less visible using
${\varphi}^{\text{skew}}$ and absent in
${\varphi}^{\text{LAT}}$.&lt;/p&gt;
&lt;p&gt;The CM, RPG and CPG methods (Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt; D-L) and PC
and DM methods (Fig. &lt;a class="link" href="#fig:numerical:rhoFK2" &gt;7&lt;/a&gt; A-F) give all
qualitatively similar results: With
${\varphi}^{\text{act}}$ and
${\varphi}^{\text{LAT}}$, not only the PDL but also
the end point of the wave front (tip) is stressed. The
${\varphi}^{\text{LAT}}$-variant distinctly shows the
PDL, as the wave front is filtered out by the definition of
${\varphi}^{\text{LAT}}$.&lt;/p&gt;
&lt;p&gt;The IPM method shows a line that is only one pixel wide, as it was
designed to localize the PD at the site of steepest phase variation.&lt;/p&gt;
&lt;p&gt;Finally, the SVF method yields many points in the region of interest,
but the result is noisy even in this idealized simulation.&lt;/p&gt;
&lt;div id="sec:numerical:results:optical"&gt;
&lt;h2 id="comparison-of-phase-defect-detection-methods-in-an-optical-voltage-mapping-experiment"&gt;Comparison of phase defect detection methods in an optical voltage mapping experiment
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;We also applied the different phase definitions and detection methods to
the excitation sequence observed in a hiAM monolayer, as detailed in
section &lt;a class="link" href="#sec:numerical:methods:data:optical" &gt;3.1.2&lt;/a&gt;. In
Figs. &lt;a class="link" href="#fig:numerical:rhoOM1" &gt;8&lt;/a&gt;, &lt;a class="link" href="#fig:numerical:rhoOM2" &gt;9&lt;/a&gt;, we show
the results of this process for all of those methods.
Fig. &lt;a class="link" href="#fig:numerical:rhoOM1" &gt;8&lt;/a&gt; A shows the optical intensity at a given
time in a multiple-spiral state. The non-phase methods GLAT and AM in
Fig. &lt;a class="link" href="#fig:numerical:rhoOM1" &gt;8&lt;/a&gt; B-C show non-zero densities at several
positions that are similar in both methods. The four most intense
points, at which either a PS or PDL could be present, are confirmed by
the other methods (CM, RPG, CPG, PC, DM, IPM) using
${\varphi}^{\text{act}}$ and
${\varphi}^{\text{skew}}$. When using
${\varphi}^{\text{LAT}}$, the same 4 points are
prominent, but they extend to a line (PDL) since the LAT and
${\varphi}^{\text{LAT}}$ keep track of the recent
history of excitation. Compared to the simulation data, more background
structures are seen in the optical voltage mapping data, such as borders
of excited regions and a staircase effect in LAT due to the time
sampling.&lt;/p&gt;
&lt;div id="fig:numerical:rhoOM1"&gt;
&lt;p&gt;&lt;img alt="Overview of PD detection methods for one snapshot of the optical voltage mapping data" class="gallery-image" data-flex-basis="205px" data-flex-grow="85" height="2531" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_optical_20200204114234.0.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_optical_20200204114234.0_hu_e5be4bf1b8da90bf.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_optical_20200204114234.0_hu_848e926307a8ea11.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_optical_20200204114234.0.png 2169w" width="2169"&gt;&lt;/p&gt;
&lt;p&gt;Figure 8: &lt;strong&gt;Overview of PD detection methods for one snapshot of the
optical voltage mapping data.&lt;/strong&gt; The data are presented in the same way
as in Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="fig:numerical:rhoOM2"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Overview of more PD detection methods for one snapshot of the optical voltage mapping data as in Fig.\u00a08" class="gallery-image" data-flex-basis="209px" data-flex-grow="87" height="2490" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_optical_20200204114234.1.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_optical_20200204114234.1_hu_e62a1721eac4a8d7.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_optical_20200204114234.1_hu_62e8bbfa53df0012.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_optical_20200204114234.1.png 2177w" width="2177"&gt;&lt;/p&gt;
&lt;p&gt;Figure 9: &lt;strong&gt;Overview of more PD detection methods for one snapshot of
the optical voltage mapping data as in
Fig. &lt;a class="link" href="#fig:numerical:rhoOM1" &gt;8&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:numerical:results:properties"&gt;&lt;/p&gt;
&lt;h2 id="properties-of-pdls-in-silico-and-in-vitro"&gt;Properties of PDLs in-silico and in-vitro
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The presented methods allow to characterize the observed PDLs in terms
of length $L$ and orientation angle
$\beta$, which is a further step in the quantitative
analysis of excitation patterns.&lt;/p&gt;
&lt;p&gt;Fig. &lt;a class="link" href="#fig:numerical:length" &gt;10&lt;/a&gt; shows the length over time of one PDL,
in simulations and experiment. The PDL is detected using the LAT phase
${\varphi}^{\text{LAT}}$ as input for the phase
coherence method (PC). We observe that the PDL length varies over time.
Its time-averaged value is summarized in
Table &lt;a class="link" href="#tbl:numerical:stats" &gt;3&lt;/a&gt;.&lt;/p&gt;
&lt;div id="fig:numerical:length"&gt;
&lt;p&gt;&lt;img alt="Length of detected PDLs over time" class="gallery-image" data-flex-basis="760px" data-flex-grow="316" height="355" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/trajectories_length.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/trajectories_length_hu_c7df42c46a7ad0ec.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/trajectories_length.png 1125w" width="1125"&gt;&lt;/p&gt;
&lt;p&gt;Figure 10: &lt;strong&gt;Length of detected PDLs over time.&lt;/strong&gt; For one of the PDLs
detected by the PC method for
${\varphi}^{\text{LAT}}$, we show how its length
changes over time. This length fluctuates around an average value.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="tbl:numerical:stats"&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;strong&gt;model / experiment&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;average length $L$&lt;/strong&gt;&lt;/th&gt;
 &lt;th&gt;&lt;strong&gt;precession period $T$&lt;/strong&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AP simulation&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;FK simulation&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BOCF simulation&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hiAM optical voltage mapping&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Table 3: &lt;strong&gt;Statistics of one PDL&amp;rsquo;s length and precession over time.&lt;/strong&gt; We
observe similar values for other PDLs in the data.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In both simulations and experiment, we also estimated the precession
period $T$ of the PDL, see
Table &lt;a class="link" href="#tbl:numerical:stats" &gt;3&lt;/a&gt; and
Fig. &lt;a class="link" href="#fig:numerical:orientation" &gt;11&lt;/a&gt;. The orientation of the PDL
changes almost linearly in all cases, hence, we observe quite low
variance along the fit linear functions. On the one hand, in the FK and
BOCF simulations, we see that $\beta$ almost stays
constant, but slightly precesses in one direction. On the other hand, in
the AP model and optical voltage mapping data, the precession takes
place in a much shorter period of time: $T$ is just
1.5 to 3 times longer than the APD in both of those cases.&lt;/p&gt;
&lt;div id="fig:numerical:orientation"&gt;
&lt;p&gt;&lt;img alt="PDL orientation over time" class="gallery-image" data-flex-basis="760px" data-flex-grow="316" height="355" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/trajectories_angle.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/trajectories_angle_hu_7396dc76ccf8ffdc.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/trajectories_angle.png 1125w" width="1125"&gt;&lt;/p&gt;
&lt;p&gt;Figure 11: &lt;strong&gt;PDL orientation over time.&lt;/strong&gt; For these figures, we use the
same PDLs as in Fig. &lt;a class="link" href="#fig:numerical:length" &gt;10&lt;/a&gt;,
Table &lt;a class="link" href="#tbl:numerical:stats" &gt;3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:numerical:results:noise"&gt;&lt;/p&gt;
&lt;h2 id="robustness-to-noisy-data"&gt;Robustness to noisy data
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;We have also investigated how the methods perform under noisy
conditions. For this we considered noisy data which were obtained as
outlined in section &lt;a class="link" href="#sec:numerical:methods:noise" &gt;3.6.1&lt;/a&gt;. We then ran
the different PD detection algorithms on those sets as well.&lt;/p&gt;
&lt;p&gt;A general observation is that if the input data $V$
is noisy, so are the state space phases
${\varphi}^{\text{act}}$ and
${\varphi}^{\text{skew}}$, which then can be seen in
$\rho$ as well.&lt;/p&gt;
&lt;p&gt;Another effect can be observed for
${\varphi}^{\text{LAT}}$, as it is based on LAT: When
$V$ increases such that it crosses the threshold
$V_*$, the value of LAT is updated to the current
time. This can be triggered by noise which is especially critical right
after $V$ decreases falling below the threshold. A
random fluctuation due to noise can then push it above the threshold
again.&lt;/p&gt;
&lt;p&gt;To counter this effect, we use a second threshold value
$V_*^\downarrow$ in the calculation of LAT and
${\varphi}^{\text{LAT}}$
(section &lt;a class="link" href="#sec:numerical:theory:phase" &gt;2.1&lt;/a&gt;). A good value for
$V_*^\downarrow$ can be obtained by decreasing
$V_*$ by an offset that is proportional to the SNR.
This value also depends on the wave back in the tissue model.&lt;/p&gt;
&lt;p&gt;$V_*^\downarrow$ must be chosen low enough such that
it suppresses LAT triggering due to noise at the wave back, but high
enough that the tissue always repolarizes below it before the tissue can
be excited again.&lt;/p&gt;
&lt;div id="fig:numerical:noise"&gt;
&lt;p&gt;&lt;img alt="Effect of additive white Gaussian noise on the detection of PDs in the FK data set" class="gallery-image" data-flex-basis="351px" data-flex-grow="146" height="1337" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/noise.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/noise_hu_733f716b1ec76688.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/noise_hu_306a7849c9d03ab8.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/noise.png 1959w" width="1959"&gt;&lt;/p&gt;
&lt;p&gt;Figure 12: &lt;strong&gt;Effect of additive white Gaussian noise on the detection of
PDs in the FK data set.&lt;/strong&gt; The PD has been determined using the PC method
applied to the LAT phase ${\varphi}^{\text{LAT}}$
with two thresholds $V_*^\downarrow=0.5$ and
$V_*=0.65$. In the three columns, we vary the SNR.
The data are presented in the same way and same point in time as in
Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;As an example, we show the PD $\rho$ as determined by
the PC method based on the LAT phase
${\varphi}^{\text{LAT}}$ for the FK data set at three
different levels of noise in Fig. &lt;a class="link" href="#fig:numerical:noise" &gt;12&lt;/a&gt;. We choose
$V_*^\downarrow=0.5$ and
$V_*=0.65$. It can clearly be seen that this method
succeeds to locate the PDL for SNRs above a critical value. In this
example this critical value is around 10 db. Here it can be seen that at
various pixels in the medium a random fluctuation due to noise has
pushed the input data from below $V_*^\downarrow$ to
above $V_*$. At this stage it is still quite clear
where the PDL is located. With more noise than this, however, this
effect takes over. This leads to being unable to distinguish the PDL
from the noise artifacts in the very noisy case with
$\text{SNR} = {5~\mathrm{dB}}$.&lt;/p&gt;
&lt;div id="sec:numerical:results:lowres"&gt;
&lt;h2 id="performance-at-lower-spatial-resolution"&gt;Performance at lower spatial resolution
&lt;/h2&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="fig:numerical:lowres"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Performance of PD detection at different spatial resolutions for the BOCF data set" class="gallery-image" data-flex-basis="351px" data-flex-grow="146" height="1336" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/lowres.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/lowres_hu_b58ad324f506021b.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/lowres_hu_f548a2fcbba7f20e.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/lowres.png 1959w" width="1959"&gt;&lt;/p&gt;
&lt;p&gt;Figure 13: &lt;strong&gt;Performance of PD detection at different spatial
resolutions for the BOCF data set.&lt;/strong&gt; The PD has been determined using
the PC method applied to the LAT phase
${\varphi}^{\text{LAT}}$. The data are presented in
the same way as in Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;We also applied the PD detection algorithms to the data sets at
different, lower spatial resolutions
(section &lt;a class="link" href="#sec:numerical:methods:lowres" &gt;3.6.2&lt;/a&gt;). In
Fig. &lt;a class="link" href="#fig:numerical:lowres" &gt;13&lt;/a&gt;, we present a frame of the input data
$V$ and the phase defect $\rho$
for PC method and the LAT phase
${\varphi}^{\text{LAT}}$. It can be seen that even at
those resolutions, the PDL can still successfully be identified. For
grid lengths larger than the length of a PDL, only few pixels have high
enough $\rho$ to be considered a PD. This illustrates
that PSs and PDLs can not be distinguished from one another when
resolution is too low.&lt;/p&gt;
&lt;p&gt;Also note that the jump in phase due to the wave front and back passing
through an area is larger at lower spatial resolution. As a PD is a
large jump in phase, our methods detect this jump as well. The wave
front is therefore harder to distinguish from a PD at low resolutions.
This effect is much stronger when using
${\varphi}^{\text{act}}$ but can be reduced by using
${\varphi}^{\text{LAT}}$ or
${\varphi}^{\text{skew}}$.&lt;/p&gt;
&lt;div id="sec:numerical:results:forcePDL"&gt;
&lt;h2 id="recovery-of-an-obstacle"&gt;Recovery of an obstacle
&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In section &lt;a class="link" href="#sec:numerical:methods:forcePDL" &gt;3.6.3&lt;/a&gt;, we designed an
experiment such that a ground truth location for a PDL is known. An
elongated obstacle was placed such that a rotor could attach to it.&lt;/p&gt;
&lt;p&gt;Looking at the resulting data, we see that in fact the rotor has
attached to this obstacle. A PDL formed around the obstacle.&lt;/p&gt;
&lt;p&gt;With these recordings in $u$ and
$v$ for the FK model, we moved on to calculate the
phases ${\varphi}$, PD densities
$\rho$, and the approximation of the characteristic
function $\chi$ of the obstacle for all different
methods. In Figs. &lt;a class="link" href="#fig:numerical:forcePDL1" &gt;14&lt;/a&gt;,
&lt;a class="link" href="#fig:numerical:forcePDL2" &gt;15&lt;/a&gt;, we present the recovered obstacles by
each of the methods.&lt;/p&gt;
&lt;div id="fig:numerical:forcePDL1"&gt;
&lt;p&gt;&lt;img alt="Recovery of the location of an obstacle based on each of the PD detection methods" class="gallery-image" data-flex-basis="204px" data-flex-grow="85" height="2611" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/groundtruth_forcePDLlowres_62.0.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/groundtruth_forcePDLlowres_62.0_hu_ac6717509f7434f1.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/groundtruth_forcePDLlowres_62.0_hu_1a509f9723c52267.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/groundtruth_forcePDLlowres_62.0.png 2225w" width="2225"&gt;&lt;/p&gt;
&lt;p&gt;Figure 14: &lt;strong&gt;Recovery of the location of an obstacle based on each of
the PD detection methods.&lt;/strong&gt; As outlined in
section &lt;a class="link" href="#sec:numerical:methods:forcePDL" &gt;3.6.3&lt;/a&gt;, we calculate an
approximation of the characteristic function
$\chi({{\bm{{x}}}})$ of the obstacle for each of the
methods. We then calculate the classification error comparing this
prediction to the ground truth
$\hat\chi({{\bm{{x}}}})$.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="fig:numerical:forcePDL2"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Recovery of the location of an obstacle based on each of the PD detection methods as in Fig.\u00a014" class="gallery-image" data-flex-basis="256px" data-flex-grow="106" height="2093" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/groundtruth_forcePDLlowres_62.1.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/groundtruth_forcePDLlowres_62.1_hu_efebc0df8ad4b82a.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/groundtruth_forcePDLlowres_62.1_hu_1bf1164bbda7d2c2.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/groundtruth_forcePDLlowres_62.1.png 2235w" width="2235"&gt;&lt;/p&gt;
&lt;p&gt;Figure 15: &lt;strong&gt;Recovery of the location of an obstacle based on each of
the PD detection methods as in Fig. &lt;a class="link" href="#fig:numerical:forcePDL1" &gt;14&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;It can be seen that all methods perform well at recovering the obstacle
leading to a classification error of around or less than We have
therefore validated the methods and shown that they are able to locate
PDLs.&lt;/p&gt;
&lt;p&gt;The AM method is also able to predict the obstacle well, even though it
is based on PSs. This is because PSs follow the PDL. While the PD based
methods show the full extent of the line, the PS based AM method only
returns a point-like region.&lt;/p&gt;
&lt;p&gt;While there is only functional re-entry in the optical voltage mapping
data set, we can still use the same algorithm to recover the long-term
location of the PDL in the OM data using the PC method and LAT phase. As
can be seen in Fig. &lt;a class="link" href="#fig:numerical:chiOM" &gt;16&lt;/a&gt;, the cores of the spirals
can successfully be detected using this method. Our prediction
$\chi({{\bm{{x}}}})$ of the sites of functional
obstacles via PDLs can be compared to so-called driver domains,
specifically to driver-density maps which are based on PSs
(&lt;a class="link" href="#ref-haissaguerre2014driver" &gt;Haissaguerre et al., 2014&lt;/a&gt;).&lt;/p&gt;
&lt;div id="fig:numerical:chiOM"&gt;
&lt;p&gt;&lt;img alt="Prediction of the characteristic function χ of the effective obstacles based on ρPC(φLAT) for the OM data set" class="gallery-image" data-flex-basis="270px" data-flex-grow="112" height="749" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/characteristic_optical_20200204114234_phiarrrhopc.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/characteristic_optical_20200204114234_phiarrrhopc_hu_ea9e6f299474e0bc.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/characteristic_optical_20200204114234_phiarrrhopc.png 844w" width="844"&gt;&lt;/p&gt;
&lt;p&gt;Figure 16: &lt;strong&gt;Prediction of the characteristic function
$\chi$ of the effective obstacles based on
$\rho^\text{PC}({\varphi}^{\text{LAT}})$ for the OM
data set.&lt;/strong&gt; Due to the functional re-entry, the PDLs in the centres of
the spirals observed in this recording effectively form functional
obstacles. These differ from anatomical obstacles in the way that
functional ones could excite and do in fact excite in this case before
the rotors form. We recover those obstacles via
$\chi$ as outlined in
section &lt;a class="link" href="#sec:numerical:methods:forcePDL" &gt;3.6.3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="sec:numerical:discussion"&gt;&lt;/p&gt;
&lt;h1 id="discussion"&gt;Discussion
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;In this paper, we provide and compare several numerical methods to
detect a PDL, a recently proposed structure present at the core of a
rotor as an alternative for the classical PSs (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;; &lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al., 2021&lt;/a&gt;).
Here, we attempt to improve the simple PDL detection methods from these
works (CM &amp;amp; RPG) and tested them on simulations and experimental data.&lt;/p&gt;
&lt;p&gt;Several phase-based algorithms were applied, not only the &lt;em&gt;classical
phase&lt;/em&gt; ${\varphi}^{\text{act}}$ but also the recently
introduced LAT-based &lt;em&gt;LAT phase&lt;/em&gt;
${\varphi}^{\text{LAT}}$ (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;), since the LAT better keeps the
spatio-temporal activation and therefore more clearly shows extended
PDs. In addition to a systematic comparison between detection methods,
we also introduce a third phase, the &lt;em&gt;skewed phase&lt;/em&gt;
${\varphi}^{\text{skew}}$ in this work.
${\varphi}^{\text{skew}}$ was designed as a way to
estimate ${\varphi}^{\text{LAT}}$ from a single
snapshot. This is useful in the post-processing of data from experiments
or simulations, where a sparse time-sampling was used.&lt;/p&gt;
&lt;p&gt;As ${\varphi}^{\text{act}}$ transitions on small
scales at the wave front and back, they may wrongly be identified as
PDLs for this phase definition. Although
${\varphi}^{\text{skew}}$ filters the wave front and
back better than ${\varphi}^{\text{act}}$, we still
find that direct measurements of LAT and
${\varphi}^{\text{LAT}}$ produce better-resolved PDLs
(cf. Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt;). Still, in the regime of fast
depolarization, wave front and wave back can be considered PDs. These
can be distinguished from PDLs due to conduction blocks via two
criteria:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Wave fronts propagate in space.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wave front and wave back connect always the same phase values, while
PDLs connect other values.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When comparing the different methods to convert phase into a PD, we find
a good performance and strong correlation between the previously coined
cosine method (&lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al., 2021&lt;/a&gt;) and the real
phase gradient method (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;). Both
methods are based on the same idea (measuring angular differences along
a circle) and therefore the correlation comes as no surprise.
Qualitatively similar performance is found by related methods (CPG, CM,
PC). The IPM method also works well. Some advanced methods such as DM,
and SVF actually performed worse in terms of contrast and noise
suppression. Of special interest is the classical AM method (&lt;a class="link" href="#ref-winfree1996quantitative" &gt;Winfree et
al., 1996&lt;/a&gt;), which consistently finds the
end point of the wave front, even if lying on a PDL, and the GLAT
method. The gradient of LAT correctly identifies the PDL and locates it
very sharply (by construction); however, its precise location depends on
the chosen threshold ($V_*$) to classify tissue as
excited or not. Regarding the calculation time, we find that the CM, AM
and GLAT are the fastest and therefore recommended to use for processing
larger datasets, e.g. extended in time or in three spatial dimensions.&lt;/p&gt;
&lt;p&gt;To calculate the state space phase for the OM data, we have used a
time-delayed version of the observed variable $u$ to
be able to calculate the state space phase
${\varphi}^{\text{act}}$. Note that this traditional
approach is unable to detect PDLs, as it gives distinct points where
${\varphi}^{\text{act}}$ is high, corresponding to
classical PSs. This explains why line shaped PDs were not investigated
closer before. In the panels of Figs. &lt;a class="link" href="#fig:numerical:rhoOM1" &gt;8&lt;/a&gt;,
&lt;a class="link" href="#fig:numerical:rhoOM2" &gt;9&lt;/a&gt; that use the LAT phase, it is however
apparent that regions with different LAT do indeed touch each other and
therefore form a PD. Depending on the time resolution of the LAT map,
staircase artifacts can be seen. However these can be filtered away by
thresholding at an appropriately high value of
$\rho$, as at those artifacts
$\rho$ is still much lower than at the PD.&lt;/p&gt;
&lt;p&gt;To show the power of these methods, we applied them to a simulation and
an OM experiment to find the length and orientation of PDLs over time.
Here we conclude that using a method sensitive to PDLs allows to also
identify linear rotor cores in experiment. However, having identified
linear cores (PDLs) in optical voltage mapping of intact rabbit hearts
(&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al., 2021&lt;/a&gt;) and human immortalized atrial
myocyte cultures (in this work) does not allow to draw general
conclusions. Therefore, we propose to use the suggested methods also on
other datasets, starting with existing optical voltage mapping results.
Then, the presented methods can be used to characterize PDL size and
rotation. Such measurement would give another handle to judge the degree
to which mathematical models of the heart resemble reality, in addition
to e.g. reproducing restitution curves and observing basic spiral
dynamics in terms of meander and stability.&lt;/p&gt;
&lt;p&gt;We have verified that the proposed methods also work well when only
noisy data or data at low resolution is available. In another experiment
where the location of a thin, elongated obstacle was known as ground
truth, we have seen that all proposed methods successfully are able to
recover its location. We conjecture that therefore the methods also work
well to recover PDLs in the setting of anatomical re-entry. More work is
needed to better characterize the defect line analogues of functional
and anatomical re-entry. In certain cases, the anchoring site may be a
hybrid version of this classical distinction: Part of the linear rotor
core can lie at an obstacle, or a functional region (PS or PDL) can be
attracted to a inhomogeneity in the medium, to stay in place there, see
Fig. &lt;a class="link" href="#fig:numerical:chiOM" &gt;16&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The methods used here are available as Python scripts from our online
repositories, see the data availability statement. Please cite this
paper when using the implementation. Note that some methods were
originally introduced elsewhere: The AM method (&lt;a class="link" href="#ref-winfree1996quantitative" &gt;Winfree et al.,
1996&lt;/a&gt;), the CM method (&lt;a class="link" href="#ref-tomii2021spatial" &gt;Tomii et al.,
2021&lt;/a&gt;) and RPG method (&lt;a class="link" href="#ref-arno2021phase" &gt;Arno et al.,
2021&lt;/a&gt;). The algorithms have currently been tested on
dense Cartesian grids in 2D, but can naturally be extended to 3D and
time, and unstructured grids (meshes), where the distinction between
vertex-based densities $\rho$ and edge-based
densities $\sigma$ will play a more prominent role.&lt;/p&gt;
&lt;div id="sec:numerical:conclusion"&gt;
&lt;h1 id="conclusion"&gt;Conclusion
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;In this work, we demonstrate that in order to visualize PDs in dense 2D
data, it is recommended to use LAT-based methods or to use the
skewed-phase to derive it from snapshots. Several algorithms were
proposed to highlight the PDs visually, for which the simple methods
(CM, RPG, CPG, PC) were most effective.&lt;/p&gt;
&lt;p&gt;We applied the methods to simulations and an optical voltage mapping
experiment; in the latter case we found that in a hiAM cell-culture, the
average PDL length in a multi-spiral state was and precession period
$T$ was . We made our detection methods publicly
available on our institutional repository and hope it can serve to
further help understanding the building blocks of cardiac excitation
patterns.&lt;/p&gt;
&lt;div id="supporting-information"&gt;
&lt;h1 id="supporting-information"&gt;Supporting information
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;In the supplementary material, we provide figures of PD densities
$\rho$, $\sigma$ for the different
methods for AP and BOCF reaction kinetics, to enable a full comparison
between methods
(Figs. &lt;a class="link" href="#fig:numerical:rhoAP1" &gt;17&lt;/a&gt;-&lt;a class="link" href="#fig:numerical:rhoBOCF2" &gt;20&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The numerical methods implemented for this paper are available as a
Python module at &lt;a class="link" href="https://gitlab.com/heartkor/py_ithildin" target="_blank" rel="noopener"
 &gt;https://gitlab.com/heartkor/py_ithildin&lt;/a&gt;. The Python
scripts used to generate the figures in this paper are available at
&lt;a class="link" href="https://gitlab.com/heartkor/scripts-pdl-detection" target="_blank" rel="noopener"
 &gt;https://gitlab.com/heartkor/scripts-pdl-detection&lt;/a&gt;. Finally, we have
archived the simulation output and pre-processed optical voltage mapping
data on which the scripts were applied on Zenodo (&lt;a class="link" href="https://doi.org/10.5281/zenodo.6477532" target="_blank" rel="noopener"
 &gt;DOI:
10.5281/zenodo.6477532&lt;/a&gt;). This
archive also contains the Python module and scripts.&lt;/p&gt;
&lt;p&gt;Please cite this paper when using the implementation and/or the data.&lt;/p&gt;
&lt;div id="fig:numerical:rhoAP1"&gt;
&lt;p&gt;&lt;img alt="Overview of PD detection methods for one snapshot of the AP data set" class="gallery-image" data-flex-basis="207px" data-flex-grow="86" height="2507" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phasealpa_7.0.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phasealpa_7.0_hu_257171ac1c08e600.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phasealpa_7.0_hu_6d2c4cc076988a2.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phasealpa_7.0.png 2172w" width="2172"&gt;&lt;/p&gt;
&lt;p&gt;Figure 17: &lt;strong&gt;Overview of PD detection methods for one snapshot of the AP
data set.&lt;/strong&gt; The data are presented in the same way as in
Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="fig:numerical:rhoAP2"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Overview of more PD detection methods for one snapshot of the AP data set as in Fig.\u00a017" class="gallery-image" data-flex-basis="209px" data-flex-grow="87" height="2496" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phasealpa_7.1.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phasealpa_7.1_hu_6b0333f7a32c237e.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phasealpa_7.1_hu_5fcfbdadeea63e01.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_phasealpa_7.1.png 2176w" width="2176"&gt;&lt;/p&gt;
&lt;p&gt;Figure 18: &lt;strong&gt;Overview of more PD detection methods for one snapshot of
the AP data set as in Fig. &lt;a class="link" href="#fig:numerical:rhoAP1" &gt;17&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="fig:numerical:rhoBOCF1"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Overview of PD detection methods for one snapshot of the BOCF data set" class="gallery-image" data-flex-basis="206px" data-flex-grow="85" height="2525" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_pdl2D_10.0.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_pdl2D_10.0_hu_13318255a3c5492a.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_pdl2D_10.0_hu_7e6d2df5a4a4ab30.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_pdl2D_10.0.png 2169w" width="2169"&gt;&lt;/p&gt;
&lt;p&gt;Figure 19: &lt;strong&gt;Overview of PD detection methods for one snapshot of the
BOCF data set.&lt;/strong&gt; The data are presented in the same way as in
Fig. &lt;a class="link" href="#fig:numerical:rhoFK1" &gt;6&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="fig:numerical:rhoBOCF2"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Overview of more PD detection methods for one snapshot of the BOCF data set as in Fig.\u00a019" class="gallery-image" data-flex-basis="209px" data-flex-grow="87" height="2496" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_pdl2D_10.1.png" srcset="https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_pdl2D_10.1_hu_1dfbc60e7f531b47.png 800w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_pdl2D_10.1_hu_cb837c34cfe50dd8.png 1600w, https://kabus.eu/2022/07/12/kabus2022numerical/figures/defects_pdl2D_10.1.png 2176w" width="2176"&gt;&lt;/p&gt;
&lt;p&gt;Figure 20: &lt;strong&gt;Overview of more PD detection methods for one snapshot of
the BOCF data set as in Fig. &lt;a class="link" href="#fig:numerical:rhoBOCF1" &gt;19&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div &gt;&lt;/p&gt;
&lt;h1 id="addenda"&gt;Addenda
&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Acknowledgments:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are grateful to Sven O. Dekker, Niels Harlaar, Daniël A. Pijnappels
and Antoine A.F. de Vries for providing optical voltage mapping data of
cardiomyogenically differentiated hiAM monolayers. Moreover, we thank
Tim De Coster for helpful comments on the analogy between a PDL and the
spiral wave tip trajectory.&lt;/p&gt;
&lt;p&gt;HD and AVP conceived the study. DK, LA and LL ran the numerical
simulations and implemented the detection algorithms. All authors wrote
parts of the manuscript and assisted in internal reviewing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Funding:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DK is supported by KU Leuven grant GPUL/20/012. LA was funded by a KU
Leuven FLOF grant and a FWO-Flanders fellowship, grant 1177022N; LL was
funded by KU Leuven and FWO-Flanders, grant G025820N. Research at
Sechenov University was financed by the Ministry of Science and Higher
Education of the Russian Federation within the framework of state
support for the creation and development of World-Class Research Centers
&amp;ldquo;Digital biodesign and personalized healthcare&amp;rdquo; 075-15-2020-926. The
funders had no role in study design, data collection and analysis,
decision to publish, or preparation of the manuscript.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Competing interests:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The authors have declared that no competing interests exist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Copyright:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;© 2022 Kabus et al. This is an open access article distributed under the
terms of the &lt;a class="link" href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noopener"
 &gt;Creative Commons Attribution
License&lt;/a&gt;, which permits
unrestricted use, distribution, and reproduction in any medium, provided
the original author and source are credited.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Peer review history:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PLOS recognizes the benefits of transparency in the peer review process;
therefore, we enable the publication of all of the content of peer
review and author responses alongside final, published articles. The
editorial history of this article is available here:
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0271351" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0271351&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Author contributions:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DK:&lt;/strong&gt;
Data curation, Formal analysis, Investigation, Methodology, Software, Visualization, Writing &amp;ndash; original draft, Writing &amp;ndash; review &amp;amp; editing. &lt;strong&gt;LA:&lt;/strong&gt;
Data curation, Formal analysis, Investigation, Methodology, Software, Writing &amp;ndash; original draft. &lt;strong&gt;LL:&lt;/strong&gt;
Data curation, Formal analysis, Investigation, Methodology, Software, Writing &amp;ndash; original draft. &lt;strong&gt;AVP:&lt;/strong&gt;
Conceptualization, Methodology, Project administration, Resources, Supervision, Writing &amp;ndash; original draft, Writing &amp;ndash; review &amp;amp; editing. &lt;strong&gt;HD:&lt;/strong&gt;
Conceptualization, Methodology, Project administration, Resources, Supervision, Writing &amp;ndash; original draft, Writing &amp;ndash; review &amp;amp; editing.
&lt;div &gt;&lt;/p&gt;
&lt;h1 id="references"&gt;References
&lt;/h1&gt;&lt;p&gt;&lt;/div&gt;
&lt;div id="refs" class="references csl-bib-body hanging-indent" entry-spacing="0" line-spacing="2"&gt;
&lt;div id="ref-aliev1996simple" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Aliev, R. R., &amp;amp; Panfilov, A. V. (1996). A simple two-variable model of
cardiac excitation. &lt;em&gt;Chaos, Solitons &amp;amp; Fractals&lt;/em&gt;, &lt;em&gt;7&lt;/em&gt;(3), 293&amp;ndash;301.
&lt;a class="link" href="https://doi.org/10.1016/0960-0779%2895%2900089-5" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/0960-0779(95)00089-5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-allessie1973circus" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Allessie, M. A., Bonke, F. I. M., &amp;amp; Schopman, F. J. G. (1973). Circus
movement in rabbit atrial muscle as a mechanism of tachycardia.
&lt;em&gt;Circulation Research&lt;/em&gt;, &lt;em&gt;33&lt;/em&gt;(1), 54&amp;ndash;62.
&lt;a class="link" href="https://doi.org/10.1161/01.RES.33.1.54" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.RES.33.1.54&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arfken1995mathematical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arfken, G. B., &amp;amp; Weber, H. J. (1995). &lt;em&gt;Mathematical methods for
physicists; 4th ed.&lt;/em&gt; Academic Press.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-arno2021phase" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Arno, L., Quan, J., Nguyen, N. T., Vanmarcke, M., Tolkacheva, E. G., &amp;amp;
Dierckx, H. (2021). A phase defect framework for the analysis of cardiac
arrhythmia patterns. &lt;em&gt;Frontiers in Physiology&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;.
&lt;a class="link" href="https://doi.org/10.3389/fphys.2021.690453" target="_blank" rel="noopener"
 &gt;https://doi.org/10.3389/fphys.2021.690453&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bray2002considerations" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bray, M.-A., &amp;amp; Wikswo, J. P. (2002). Considerations in phase plane
analysis for nonstationary reentrant cardiac behavior. &lt;em&gt;Physical Review
E&lt;/em&gt;, &lt;em&gt;65&lt;/em&gt;(5), 051902. &lt;a class="link" href="https://doi.org/10.1103/PhysRevE.65.051902" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1103/PhysRevE.65.051902&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-bueno2008model" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Bueno-Orovio, A., Cherry, E. M., &amp;amp; Fenton, F. H. (2008). Minimal model
for human ventricular action potentials in tissue. &lt;em&gt;Journal of
Theoretical Biology&lt;/em&gt;, &lt;em&gt;253&lt;/em&gt;(3), 544&amp;ndash;560.
&lt;a class="link" href="https://doi.org/10.1016/j.jtbi.2008.03.029" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.jtbi.2008.03.029&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clayton2011review" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clayton, R., Bernus, O., Cherry, E. M., Dierckx, H., Fenton, F. H.,
Mirabella, L., Panfilov, A. V., Sachse, F. B., Seemann, G., &amp;amp; Zhang, H.
(2011). Models of cardiac tissue electrophysiology: Progress, challenges
and open questions. &lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;,
&lt;em&gt;104&lt;/em&gt;(1-3), 22&amp;ndash;48. &lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2010.05.008" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2010.05.008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-clayton2006phase" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Clayton, R., Zhuchkova, E., &amp;amp; Panfilov, A. (2006). Phase singularities
and filaments:
&lt;span &gt;Simplifying&lt;/span&gt;
complexity in computational models of ventricular fibrillation.
&lt;em&gt;Progress in Biophysics and Molecular Biology&lt;/em&gt;, &lt;em&gt;90&lt;/em&gt;(1-3), 378&amp;ndash;398.
&lt;a class="link" href="https://doi.org/10.1016/j.pbiomolbio.2005.06.011" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.pbiomolbio.2005.06.011&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-efimov1999evidence" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Efimov, I. R., Sidorov, V., Cheng, Y., &amp;amp; Wollenzier, B. (1999). Evidence
of three-dimensional scroll waves with ribbon-shaped filament as a
mechanism of ventricular tachycardia in the isolated rabbit heart.
&lt;em&gt;Journal of Cardiovascular Electrophysiology&lt;/em&gt;, &lt;em&gt;10&lt;/em&gt;(11), 1452&amp;ndash;1462.
&lt;a class="link" href="https://doi.org/10.1111/j.1540-8167.1999.tb00204.x" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1111/j.1540-8167.1999.tb00204.x&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-fenton1998vortex" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Fenton, F. H., &amp;amp; Karma, A. (1998). Vortex dynamics in three-dimensional
continuous myocardium with fiber rotation: Filament instability and
fibrillation. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;(1), 20&amp;ndash;47. &lt;a class="link" href="https://doi.org/10.1063/1.166311" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166311&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gray1995nonstationary" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gray, R. A., Jalife, J., Panfilov, A., Baxter, W. T., Cabo, C.,
Davidenko, J. M., &amp;amp; Pertsov, A. M. (1995). Nonstationary vortexlike
reentrant activity as a mechanism of polymorphic ventricular tachycardia
in the isolated rabbit heart. &lt;em&gt;Circulation&lt;/em&gt;, &lt;em&gt;91&lt;/em&gt;(9), 2454&amp;ndash;2469.
&lt;a class="link" href="https://doi.org/10.1161/01.CIR.91.9.2454" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.CIR.91.9.2454&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-gray1998spatial" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Gray, R. A., Pertsov, A. M., &amp;amp; Jalife, J. (1998). Spatial and temporal
organization during cardiac fibrillation. &lt;em&gt;Nature&lt;/em&gt;, &lt;em&gt;392&lt;/em&gt;(6671), 75&amp;ndash;78.
&lt;a class="link" href="https://doi.org/10.1038/32164" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/32164&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-haissaguerre2014driver" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Haissaguerre, M., Hocini, M., Denis, A., Shah, A. J., Komatsu, Y.,
Yamashita, S., Daly, M., Amraoui, S., Zellerhoff, S., Picat, M.-Q.,
Quotb, A., Jesel, L., Lim, H., Ploux, S., Bordachar, P., Attuel, G.,
Meillet, V., Ritter, P., Derval, N., Sacher, F., Bernus, O., Cochet, H.,
Jais, P., &amp;amp; Dubois, R. (2014). Driver domains in persistent atrial
fibrillation. &lt;em&gt;Circulation&lt;/em&gt;, &lt;em&gt;130&lt;/em&gt;(7), 530&amp;ndash;538.
&lt;a class="link" href="https://doi.org/10.1161/circulationaha.113.005421" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/circulationaha.113.005421&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-harlaar2022hiam" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Harlaar, N., Dekker, S. O., Zhang, J., Snabel, R. R., Veldkamp, M. W.,
Verkerk, A. O., Fabres, C. C., Schwach, V., Lerink, L. J. S., Rivaud, M.
R., Mulder, A. A., Corver, W. E., Goumans, M. J. T. H., Dobrev, D.,
Klautz, R. J. M., Schalij, M. J., Veenstra, G. J. C., Passier, R.,
Brakel, T. J. van, Pijnappels, D. A., &amp;amp; Vries, A. A. F. de. (2022).
Conditional immortalization of human atrial myocytes for the generation
of in vitro models of atrial fibrillation. &lt;em&gt;Nature Biomedical
Engineering&lt;/em&gt;, &lt;em&gt;6&lt;/em&gt;(4), 389&amp;ndash;402.
&lt;a class="link" href="https://doi.org/10.1038/s41551-021-00827-5" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1038/s41551-021-00827-5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-janse1980flow" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Janse, M. J., van Capelle, F. J. L., Morsink, H., Kleber, A. G.,
Wilms-Schopman, F. J. G., Cardinal, R., Naumann D&amp;rsquo;Alnoncourt, C., &amp;amp;
Durrer, D. (1980). Flow of injury current and patterns of excitation
during early ventricular arrhythmias in acute regional myocardial
ischemia in isolated porcine and canine hearts.
&lt;span &gt;Evidence&lt;/span&gt; for 2
different arrhythmogenic mechanisms. &lt;em&gt;Circulation Research&lt;/em&gt;, &lt;em&gt;47&lt;/em&gt;,
151&amp;ndash;165. &lt;a class="link" href="https://doi.org/10.1161/01.RES.47.2.151" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.RES.47.2.151&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kabus2022numerical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kabus, D., Arno, L., Leenknegt, L., Panfilov, A. V., &amp;amp; Dierckx, H.
(2022). Numerical methods for the detection of phase defect structures
in excitable media. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;(7), 1&amp;ndash;31.
&lt;a class="link" href="https://doi.org/10.1371/journal.pone.0271351" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1371/journal.pone.0271351&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-keener1991effects" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Keener, J. P. (1991). The effects of discrete gap junction coupling on
propagation in myocardium. &lt;em&gt;Journal of Theoretical Biology&lt;/em&gt;, &lt;em&gt;148&lt;/em&gt;(1),
49&amp;ndash;82. &lt;a class="link" href="https://doi.org/10.1016/S0022-5193%2805%2980465-5" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/S0022-5193(05)80465-5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kuklik2014reconstruction" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kuklik, P., Zeemering, S., Maesen, B., Maessen, J., Crijns, H. J.,
Verheule, S., Ganesan, A. N., &amp;amp; Schotten, U. (2014). Reconstruction of
instantaneous phase of unipolar atrial contact electrogram using a
concept of sinusoidal recomposition and hilbert transform. &lt;em&gt;IEEE
Transactions on Biomedical Engineering&lt;/em&gt;, &lt;em&gt;62&lt;/em&gt;(1), 296&amp;ndash;302.
&lt;a class="link" href="https://doi.org/10.1109/TBME.2014.2350029" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1109/TBME.2014.2350029&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-kuramoto1984chemical" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Kuramoto, Y. (1984). &lt;em&gt;Chemical oscillations, waves, and turbulence&lt;/em&gt;.
Springer-Verlag.
&lt;a class="link" href="https://link.springer.com/book/10.1007/978-3-642-69689-3" target="_blank" rel="noopener"
 &gt;https://link.springer.com/book/10.1007/978-3-642-69689-3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-priebe1998simulation" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Priebe, L., &amp;amp; Beuckelmann, D. J. (1998). Simulation study of cellular
electric properties in heart failure. &lt;em&gt;Circulation Research&lt;/em&gt;, &lt;em&gt;82&lt;/em&gt;(11),
1206&amp;ndash;1223. &lt;a class="link" href="https://doi.org/10.1161/01.res.82.11.1206" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.res.82.11.1206&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-schilling1998simultaneous" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Schilling, R. J., Peters, N. S., &amp;amp; Davies, D. W. (1998). Simultaneous
endocardial mapping in the human left ventricle using a noncontact
catheter: Comparison of contact and reconstructed electrograms during
sinus rhythm. &lt;em&gt;Circulation&lt;/em&gt;, &lt;em&gt;98&lt;/em&gt;(9), 887&amp;ndash;898.
&lt;a class="link" href="https://doi.org/10.1161/01.CIR.98.9.887" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1161/01.CIR.98.9.887&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-tomii2021spatial" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Tomii, N., Yamazaki, M., Ashihara, T., Nakazawa, K., Shibata, N., Honjo,
H., &amp;amp; Sakuma, I. (2021). Spatial phase discontinuity at the center of
moving cardiac spiral waves. &lt;em&gt;Computers in Biology and Medicine&lt;/em&gt;, &lt;em&gt;130&lt;/em&gt;,
104217. &lt;a class="link" href="https://doi.org/10.1016/j.compbiomed.2021.104217" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1016/j.compbiomed.2021.104217&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-winfree1974patterns" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Winfree, A. T. (1974). Patterns of phase compromise in biological
cycles. &lt;em&gt;Journal of Mathematical Biology&lt;/em&gt;, &lt;em&gt;1&lt;/em&gt;(1), 73&amp;ndash;93.
&lt;a class="link" href="https://doi.org/10.1007/BF02339491" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1007/BF02339491&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-winfree1991varieties" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Winfree, A. T. (1991). Varieties of spiral wave behavior: An
experimentalist&amp;rsquo;s approach to the theory of excitable media. &lt;em&gt;Chaos: An
Interdisciplinary Journal of Nonlinear Science&lt;/em&gt;, &lt;em&gt;1&lt;/em&gt;(3), 303&amp;ndash;334.
&lt;a class="link" href="https://doi.org/10.1063/1.165844" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.165844&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-winfree1996quantitative" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Winfree, A. T., Caudle, S., Chen, G. L., McGuire, P., &amp;amp; Szilagyi, Z.
(1996). Quantitative optical tomography of chemical waves and their
organizing centers. &lt;em&gt;Chaos: An Interdisciplinary Journal of Nonlinear
Science&lt;/em&gt;, &lt;em&gt;6&lt;/em&gt;(4), 617&amp;ndash;626. &lt;a class="link" href="https://doi.org/10.1063/1.166208" target="_blank" rel="noopener"
 &gt;https://doi.org/10.1063/1.166208&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;div id="ref-zykov1987simulation" class="csl-entry"&gt;&lt;/p&gt;
&lt;p&gt;Zykov, V. S. (1987). &lt;em&gt;Simulation of wave processes in excitable media&lt;/em&gt;.
Manchester University Press.&lt;/p&gt;
&lt;p&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Tomii et al. (&lt;a class="link" href="#ref-tomii2021spatial" &gt;2021&lt;/a&gt;)&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Arno et al. (&lt;a class="link" href="#ref-arno2021phase" &gt;2021&lt;/a&gt;)&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Winfree et al. (&lt;a class="link" href="#ref-winfree1996quantitative" &gt;1996&lt;/a&gt;)&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Summer School in Bordeaux</title><link>https://kabus.eu/2022/07/03/bordeaux/</link><pubDate>Sun, 03 Jul 2022 21:20:44 +0200</pubDate><guid>https://kabus.eu/2022/07/03/bordeaux/</guid><description>&lt;img src="https://kabus.eu/2022/07/03/bordeaux/liryc.jpg" alt="Featured image of post Summer School in Bordeaux" /&gt;&lt;p&gt;&lt;img alt="Dinner on the Garronne" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/sunglasses.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/sunglasses_hu_bd1b7f13d5226c57.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/sunglasses.jpg 1200w" width="1200"&gt;
&lt;img alt="Dusk in Bordeaux" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/skyline.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/skyline_hu_cac72a53bdabeb2c.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/skyline.jpg 1600w" width="1600"&gt;
&lt;img alt="Trip to the 110m-tall Dune du Pilat" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/dune.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/dune_hu_95fcce636851075b.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/dune.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Charming streets of Bordeaux" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/street.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/street_hu_a10e55af3ed9b644.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/street.jpg 1200w" width="1200"&gt;
&lt;img alt="Less parking lots and more space for people!" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/busy.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/busy_hu_a3056de42462f09b.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/busy.jpg 1600w" width="1600"&gt;
&lt;img alt="An old cast-iron gate with the three-crescent emblem of Bordeaux" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/gate.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/gate_hu_7089f249e1ded1b5.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/gate.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;h1 id="french-culture"&gt;French culture
&lt;/h1&gt;&lt;p&gt;&lt;img alt="Musée d’art Contemporain de Bordeaux" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/mirrors.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/mirrors_hu_13107b07b7fe355b.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/mirrors.jpg 1200w" width="1200"&gt;
&lt;img alt="Typical Bordeaux Canelés" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/canele.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/canele_hu_ef2b7ef116f98e61.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/canele.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Discover typical smells of wine at La Cité du Vin" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/smell.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/smell_hu_4b75b32be09634c6.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/smell.jpg 1600w" width="1600"&gt;
&lt;img alt="Spectrum of wine colours" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/colour.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/colour_hu_7310766dab36c436.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/colour.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;h1 id="liryc-summer-school"&gt;LIRYC Summer School
&lt;/h1&gt;&lt;p&gt;&lt;img alt="Team HeartKOR" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/coworkers.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/coworkers_hu_49f687aafa92f257.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/coworkers.jpg 1200w" width="1200"&gt;
&lt;img alt="Here, you can learn how to control catheters in the heart chambers." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/catheters.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/catheters_hu_e8de1847ce91142b.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/catheters.jpg 1600w" width="1600"&gt;
&lt;img alt="They always provided good food!" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/07/03/bordeaux/desert.jpg" srcset="https://kabus.eu/2022/07/03/bordeaux/desert_hu_193a0129c074a6fd.jpg 800w, https://kabus.eu/2022/07/03/bordeaux/desert.jpg 1600w" width="1600"&gt;&lt;/p&gt;</description></item><item><title>New things and old things in Copenhagen</title><link>https://kabus.eu/2022/04/05/copenhagen/</link><pubDate>Tue, 05 Apr 2022 19:03:44 +0200</pubDate><guid>https://kabus.eu/2022/04/05/copenhagen/</guid><description>&lt;img src="https://kabus.eu/2022/04/05/copenhagen/colour.jpg" alt="Featured image of post New things and old things in Copenhagen" /&gt;&lt;h1 id="impressions-of-danish-culture"&gt;Impressions of Danish culture
&lt;/h1&gt;&lt;p&gt;&lt;img alt="Lots of flags in the central station" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/flags.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/flags_hu_e60db01c7c32d08.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/flags.jpg 1600w" width="1600"&gt;
&lt;img alt="Map of the fully automatic, reliable metro network" class="gallery-image" data-flex-basis="223px" data-flex-grow="92" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/metro.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/metro_hu_ae2657d2ff6ab990.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/metro.jpg 1487w" width="1487"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Swimming pool with icy water. Probably a good idea in summer!" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/swim.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/swim_hu_eddcbce307b7b2db.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/swim.jpg 1600w" width="1600"&gt;
&lt;img alt="Recommendation: Flæskesteg in the “Chicky Grill Bar”" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/food.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/food_hu_27e561fdcb55d781.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/food.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;h1 id="modern-architecture"&gt;Modern architecture
&lt;/h1&gt;&lt;p&gt;Unfortunately, many buildings that are built nowadays look like UFOs, that
landed right in the middle of European old towns.&lt;/p&gt;
&lt;p&gt;&lt;img alt="UFO #1: The Royal Danish Library" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/library.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/library_hu_6a3c3aec9f45f377.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/library.jpg 1600w" width="1600"&gt;
&lt;img alt="UFO #2: The Opera of Copenhagen" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/opera.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/opera_hu_62a7176432cc5035.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/opera.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;h1 id="older-architecture"&gt;Older architecture
&lt;/h1&gt;&lt;p&gt;&lt;img alt="Views of the old town" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/towers.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/towers_hu_238f0738b0a74d4f.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/towers.jpg 1600w" width="1600"&gt;
&lt;img alt="Entrance to the Tivoli amusement park which was still closed in early April" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/tivoli.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/tivoli_hu_74aeb5e30b77e0ea.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/tivoli.jpg 1600w" width="1600"&gt;
&lt;img alt="Sunglasses and winter coat" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/path.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/path_hu_a2c6d5e8c272719b.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/path.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;I personally prefer buildings in the old architectural styles.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Rosenborg Castle" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/castle.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/castle_hu_35fe8f0c8f552c0.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/castle.jpg 1600w" width="1600"&gt;
&lt;img alt="Timber-framed buildings in the old town" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/fachwerk.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/fachwerk_hu_c41524db762cd91a.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/fachwerk.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;h1 id="ehra-conference"&gt;EHRA conference
&lt;/h1&gt;&lt;p&gt;&lt;img alt="My digital poster" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/poster.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/poster_hu_b7d5c923e24dd757.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/poster.jpg 1600w" width="1600"&gt;
&lt;img alt="For this talk, 3D glasses were handed out to be able to see the 3D models properly." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/glasses.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/glasses_hu_38de8de188f03623.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/glasses.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Undivided attention." class="gallery-image" data-flex-basis="507px" data-flex-grow="211" height="756" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2022/04/05/copenhagen/laptop.jpg" srcset="https://kabus.eu/2022/04/05/copenhagen/laptop_hu_339acfdd101cd5a8.jpg 800w, https://kabus.eu/2022/04/05/copenhagen/laptop.jpg 1600w" width="1600"&gt;&lt;/p&gt;</description></item><item><title>A few days in Luxembourg</title><link>https://kabus.eu/2021/11/13/luxembourg/</link><pubDate>Sat, 13 Nov 2021 15:42:18 +0100</pubDate><guid>https://kabus.eu/2021/11/13/luxembourg/</guid><description>&lt;img src="https://kabus.eu/2021/11/13/luxembourg/valley.jpg" alt="Featured image of post A few days in Luxembourg" /&gt;&lt;p&gt;&lt;img alt="This building of the Uni Luxembourg in Esch was the conference venue." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/11/13/luxembourg/uni.jpg" srcset="https://kabus.eu/2021/11/13/luxembourg/uni_hu_856c1225e946d98f.jpg 800w, https://kabus.eu/2021/11/13/luxembourg/uni.jpg 1600w" width="1600"&gt;
&lt;img alt="This is a good suggestion for the Ruhr area: It is possible to turn old industrial areas into lively neighbourhoods." class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/11/13/luxembourg/tripod.jpg" srcset="https://kabus.eu/2021/11/13/luxembourg/tripod_hu_fc78c448fe9b39e6.jpg 800w, https://kabus.eu/2021/11/13/luxembourg/tripod.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="I guess it’s prohibited to pass through here." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/11/13/luxembourg/stop.jpg" srcset="https://kabus.eu/2021/11/13/luxembourg/stop_hu_ca26a6a07bd899c7.jpg 800w, https://kabus.eu/2021/11/13/luxembourg/stop.jpg 1200w" width="1200"&gt;
&lt;img alt="Luxembourg’s trams can drive without overhead wires or third rails thanks to fast-charging batteries." class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/11/13/luxembourg/tram.jpg" srcset="https://kabus.eu/2021/11/13/luxembourg/tram_hu_4538303a7c3a4157.jpg 800w, https://kabus.eu/2021/11/13/luxembourg/tram.jpg 1200w" width="1200"&gt;&lt;/p&gt;</description></item><item><title>Island hopping near Istria</title><link>https://kabus.eu/2021/04/26/croatia/</link><pubDate>Mon, 26 Apr 2021 11:13:43 +0200</pubDate><guid>https://kabus.eu/2021/04/26/croatia/</guid><description>&lt;img src="https://kabus.eu/2021/04/26/croatia/cover.jpg" alt="Featured image of post Island hopping near Istria" /&gt;&lt;p&gt;&lt;div class="video-wrapper"&gt;
 &lt;video
 controls
 src="dolphins.mp4"
 
 
 
 &gt;
 &lt;p&gt;
 Your browser doesn't support HTML5 video. Here is a
 &lt;a href="dolphins.mp4"&gt;link to the video&lt;/a&gt; instead.
 &lt;/p&gt;
 &lt;/video&gt;
&lt;/div&gt;

&lt;em&gt;Dolphins sighted!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Sunset in the old town of Rovinj" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/04/26/croatia/tree.jpg" srcset="https://kabus.eu/2021/04/26/croatia/tree_hu_ff531f01bc6caeb4.jpg 800w, https://kabus.eu/2021/04/26/croatia/tree.jpg 1600w" width="1600"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="The harbour of Rovinj at night" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/04/26/croatia/yellow.jpg" srcset="https://kabus.eu/2021/04/26/croatia/yellow_hu_e85a764c4d08b51.jpg 800w, https://kabus.eu/2021/04/26/croatia/yellow.jpg 1600w" width="1600"&gt;
&lt;img alt="An old facade in Rovinj" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/04/26/croatia/facade.jpg" srcset="https://kabus.eu/2021/04/26/croatia/facade_hu_1301e00d12ff0dc8.jpg 800w, https://kabus.eu/2021/04/26/croatia/facade.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Fossilised dinosaur footprint on the main island of the Brijuni archipelago" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/04/26/croatia/footprint.jpg" srcset="https://kabus.eu/2021/04/26/croatia/footprint_hu_ed3f64cc44cb8908.jpg 800w, https://kabus.eu/2021/04/26/croatia/footprint.jpg 1200w" width="1200"&gt;
&lt;img alt="Full speed ahead!" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/04/26/croatia/wind.jpg" srcset="https://kabus.eu/2021/04/26/croatia/wind_hu_cb5e6a88d99bdd40.jpg 800w, https://kabus.eu/2021/04/26/croatia/wind.jpg 1200w" width="1200"&gt;
&lt;img alt="Reading material for calm weather: “Dune” by Frank Herbert" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/04/26/croatia/dune.jpg" srcset="https://kabus.eu/2021/04/26/croatia/dune_hu_df3c73821b26c24b.jpg 800w, https://kabus.eu/2021/04/26/croatia/dune.jpg 1200w" width="1200"&gt;
&lt;img alt="Surprisingly-good snapshot of flowers in front of a crumbling wall" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2021/04/26/croatia/wallflower.jpg" srcset="https://kabus.eu/2021/04/26/croatia/wallflower_hu_fa3790cecca3066b.jpg 800w, https://kabus.eu/2021/04/26/croatia/wallflower.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;This sailing trip was organised by SIRUB, the sailing club of Ruhr-University Bochum.
If you live in the Ruhr area and want to learn sailing, feel free to visit &lt;a class="link" href="https://sirub.com" target="_blank" rel="noopener"
 &gt;SIRUB.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>What I still want to see in New Zealand</title><link>https://kabus.eu/2020/04/25/wunschliste-nz/</link><pubDate>Sat, 25 Apr 2020 13:31:00 +0200</pubDate><guid>https://kabus.eu/2020/04/25/wunschliste-nz/</guid><description>&lt;img src="https://kabus.eu/2020/04/25/wunschliste-nz/wunschliste-nz-schriftzug.jpg" alt="Featured image of post What I still want to see in New Zealand" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>The Fall of New Zealand</title><link>https://kabus.eu/2020/04/16/akaroa/</link><pubDate>Thu, 16 Apr 2020 14:37:00 +0200</pubDate><guid>https://kabus.eu/2020/04/16/akaroa/</guid><description>&lt;img src="https://kabus.eu/2020/04/16/akaroa/schriftzug.jpg" alt="Featured image of post The Fall of New Zealand" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>Water ist the mountains' blood</title><link>https://kabus.eu/2020/03/28/southern-lakes/</link><pubDate>Sat, 28 Mar 2020 13:07:00 +1300</pubDate><guid>https://kabus.eu/2020/03/28/southern-lakes/</guid><description>&lt;img src="https://kabus.eu/2020/03/28/southern-lakes/schriftzug.jpg" alt="Featured image of post Water ist the mountains' blood" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>The raw, vertical West Coast</title><link>https://kabus.eu/2020/03/13/west-coast/</link><pubDate>Fri, 13 Mar 2020 20:45:00 +1300</pubDate><guid>https://kabus.eu/2020/03/13/west-coast/</guid><description>&lt;img src="https://kabus.eu/2020/03/13/west-coast/schriftzug.jpg" alt="Featured image of post The raw, vertical West Coast" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>The North of the South</title><link>https://kabus.eu/2020/03/03/tasman/</link><pubDate>Tue, 03 Mar 2020 12:44:00 +1300</pubDate><guid>https://kabus.eu/2020/03/03/tasman/</guid><description>&lt;img src="https://kabus.eu/2020/03/03/tasman/schriftzug.jpg" alt="Featured image of post The North of the South" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>Lots of Leeway</title><link>https://kabus.eu/2020/02/24/blenheim/</link><pubDate>Mon, 24 Feb 2020 14:30:00 +1300</pubDate><guid>https://kabus.eu/2020/02/24/blenheim/</guid><description>&lt;img src="https://kabus.eu/2020/02/24/blenheim/schriftzug.jpg" alt="Featured image of post Lots of Leeway" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>From Mount Taranaki to the Interislander</title><link>https://kabus.eu/2020/01/21/new-plymouth-wellington/</link><pubDate>Tue, 21 Jan 2020 17:17:00 +1300</pubDate><guid>https://kabus.eu/2020/01/21/new-plymouth-wellington/</guid><description>&lt;img src="https://kabus.eu/2020/01/21/new-plymouth-wellington/schriftzug.jpg" alt="Featured image of post From Mount Taranaki to the Interislander" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>Summer, sun, christmas</title><link>https://kabus.eu/2020/01/02/plenty/</link><pubDate>Thu, 02 Jan 2020 23:00:00 +1300</pubDate><guid>https://kabus.eu/2020/01/02/plenty/</guid><description>&lt;img src="https://kabus.eu/2020/01/02/plenty/schriftzug.jpg" alt="Featured image of post Summer, sun, christmas" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>Roadtrip of the Rings</title><link>https://kabus.eu/2019/12/22/roadtrip/</link><pubDate>Sun, 22 Dec 2019 17:00:00 +1300</pubDate><guid>https://kabus.eu/2019/12/22/roadtrip/</guid><description>&lt;img src="https://kabus.eu/2019/12/22/roadtrip/schriftzug.jpg" alt="Featured image of post Roadtrip of the Rings" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>Boat trip at the end of the blueberry season</title><link>https://kabus.eu/2019/12/03/far-north/</link><pubDate>Tue, 03 Dec 2019 22:38:00 +1300</pubDate><guid>https://kabus.eu/2019/12/03/far-north/</guid><description>&lt;img src="https://kabus.eu/2019/12/03/far-north/schriftzug.jpg" alt="Featured image of post Boat trip at the end of the blueberry season" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>Blueberry picking in the Far North</title><link>https://kabus.eu/2019/11/11/pukenui/</link><pubDate>Mon, 11 Nov 2019 14:55:00 +1300</pubDate><guid>https://kabus.eu/2019/11/11/pukenui/</guid><description>&lt;img src="https://kabus.eu/2019/11/11/pukenui/schriftzug.jpg" alt="Featured image of post Blueberry picking in the Far North" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>Finding paradise in the Bay of Islands</title><link>https://kabus.eu/2019/10/25/paihia/</link><pubDate>Fri, 25 Oct 2019 20:24:00 +1300</pubDate><guid>https://kabus.eu/2019/10/25/paihia/</guid><description>&lt;img src="https://kabus.eu/2019/10/25/paihia/schriftzug.jpg" alt="Featured image of post Finding paradise in the Bay of Islands" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>In the beginning, there was Auckland</title><link>https://kabus.eu/2019/10/20/auckland/</link><pubDate>Sun, 20 Oct 2019 20:44:00 +1300</pubDate><guid>https://kabus.eu/2019/10/20/auckland/</guid><description>&lt;img src="https://kabus.eu/2019/10/20/auckland/schriftzug.jpg" alt="Featured image of post In the beginning, there was Auckland" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>The breathtaking Blue Mountains</title><link>https://kabus.eu/2019/10/10/blue-mountains/</link><pubDate>Thu, 10 Oct 2019 14:23:00 +1100</pubDate><guid>https://kabus.eu/2019/10/10/blue-mountains/</guid><description>&lt;img src="https://kabus.eu/2019/10/10/blue-mountains/schriftzug.jpg" alt="Featured image of post The breathtaking Blue Mountains" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>Sydney -- metropolis on the other side of the globe</title><link>https://kabus.eu/2019/10/04/sydney/</link><pubDate>Fri, 04 Oct 2019 12:02:00 +1000</pubDate><guid>https://kabus.eu/2019/10/04/sydney/</guid><description>&lt;img src="https://kabus.eu/2019/10/04/sydney/schriftzug.jpg" alt="Featured image of post Sydney -- metropolis on the other side of the globe" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>How to use Syncthing with Wi-Fi Direct on Android</title><link>https://kabus.eu/2019/09/28/direct-syncthing/</link><pubDate>Sat, 28 Sep 2019 10:45:00 +1000</pubDate><guid>https://kabus.eu/2019/09/28/direct-syncthing/</guid><description>&lt;p&gt;We can use the Android mobile hotspot feature to create a network
that we will use to sync files.&lt;/p&gt;
&lt;h2 id="1-turn-off-mobile-data-usage"&gt;1. Turn off mobile data usage
&lt;/h2&gt;&lt;p&gt;Since we don&amp;rsquo;t want and don&amp;rsquo;t need to use the internet to sync files, we can turn off mobile data.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Turn off mobile data usage in the Settings app" class="gallery-image" data-flex-basis="1192px" data-flex-grow="496" height="248" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2019/09/28/direct-syncthing/mobile-data.png" srcset="https://kabus.eu/2019/09/28/direct-syncthing/mobile-data_hu_f94184746992e6e4.png 800w, https://kabus.eu/2019/09/28/direct-syncthing/mobile-data.png 1232w" width="1232"&gt;&lt;/p&gt;
&lt;h2 id="2-turn-on-wi-fi-hotspot"&gt;2. Turn on Wi-Fi hotspot
&lt;/h2&gt;&lt;p&gt;Open up a mobile hotspot on your phone.
You will need to choose the name of your network and a password, if you&amp;rsquo;ve never used this feature before.&lt;/p&gt;
&lt;p&gt;Connect your PC to the Wi-Fi network you just created and make sure, Syncthing is running on the PC.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Start the mobile hotspot on your phone" class="gallery-image" data-flex-basis="207px" data-flex-grow="86" height="1652" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2019/09/28/direct-syncthing/hotspot.png" srcset="https://kabus.eu/2019/09/28/direct-syncthing/hotspot_hu_b188db8692b16302.png 800w, https://kabus.eu/2019/09/28/direct-syncthing/hotspot.png 1428w" width="1428"&gt;&lt;/p&gt;
&lt;h2 id="3-change-run-conditions"&gt;3. Change run conditions
&lt;/h2&gt;&lt;p&gt;If you open up the Syncthing app on your Android phone, you will probably get a message that it is not currently running.
We need to change this.&lt;/p&gt;
&lt;p&gt;&lt;img alt="We need to change the run conditions" class="gallery-image" data-flex-basis="453px" data-flex-grow="188" height="648" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2019/09/28/direct-syncthing/change-run-conditions.png" srcset="https://kabus.eu/2019/09/28/direct-syncthing/change-run-conditions_hu_2919752462be82e2.png 800w, https://kabus.eu/2019/09/28/direct-syncthing/change-run-conditions.png 1224w" width="1224"&gt;&lt;/p&gt;
&lt;p&gt;Mainly, we need to make sure that it also runs without an internet connection.
To do this turn on the setting to let it run in flight mode.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Enable synchronisation when there is no internet connection" class="gallery-image" data-flex-basis="1338px" data-flex-grow="557" height="256" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2019/09/28/direct-syncthing/run-in-flight-mode.png" srcset="https://kabus.eu/2019/09/28/direct-syncthing/run-in-flight-mode_hu_5bf5b49705400b32.png 800w, https://kabus.eu/2019/09/28/direct-syncthing/run-in-flight-mode.png 1428w" width="1428"&gt;&lt;/p&gt;
&lt;p&gt;You might also need to change other settings.
For example, it can be useful to turn on sync when there is no charging cable (AC cable) is connected.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Let Syncthing run when running on battery power, if necessary" class="gallery-image" data-flex-basis="337px" data-flex-grow="140" height="864" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2019/09/28/direct-syncthing/power.png" srcset="https://kabus.eu/2019/09/28/direct-syncthing/power_hu_a1d988cdb4b9eb6.png 800w, https://kabus.eu/2019/09/28/direct-syncthing/power.png 1216w" width="1216"&gt;&lt;/p&gt;
&lt;h2 id="thats-it"&gt;That&amp;rsquo;s it
&lt;/h2&gt;&lt;p&gt;If you set up the run conditions and the Wi-Fi connection successfully, Syncthing should now start syncing:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Success! Syncthing is now transfering files via Wi-Fi direct" class="gallery-image" data-flex-basis="1403px" data-flex-grow="584" height="236" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2019/09/28/direct-syncthing/syncing.png" srcset="https://kabus.eu/2019/09/28/direct-syncthing/syncing_hu_b07fbb9c52d62341.png 800w, https://kabus.eu/2019/09/28/direct-syncthing/syncing.png 1380w" width="1380"&gt;&lt;/p&gt;
&lt;p&gt;This has been tested with Syncthing 1.2.2 on Android 8.1 and Arch Linux.&lt;/p&gt;</description></item><item><title>Designs for RUB shirts und pullovers</title><link>https://kabus.eu/2019/06/15/ruhr-uni-shirts-pullover/</link><pubDate>Sat, 15 Jun 2019 22:49:00 +0200</pubDate><guid>https://kabus.eu/2019/06/15/ruhr-uni-shirts-pullover/</guid><description>&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>Simple JavaScript gallery</title><link>https://kabus.eu/2019/05/26/simple-js-gallery/</link><pubDate>Sun, 26 May 2019 19:42:00 +0200</pubDate><guid>https://kabus.eu/2019/05/26/simple-js-gallery/</guid><description>&lt;p&gt;In &lt;a class="link" href="https://kabus.eu/2019/05/21/segeln-ostsee" &gt;some recent&lt;/a&gt; &lt;a class="link" href="https://kabus.eu/2019/04/28/how-to-buy-a-phone" &gt;blog posts&lt;/a&gt;, I added quite a lot of images.
So, I thought it would be nice, to be able to click on an image to view it full screen and then to scroll through all images on the page.
I did not find a minimal script that did just that, all options were very bloated, so I just wrote my own slideshow script.&lt;/p&gt;
&lt;p&gt;The script is so simple, that this blog post contains all the code, so you can take it, adapt it, and make it your own.&lt;/p&gt;
&lt;h1 id="example"&gt;Example
&lt;/h1&gt;&lt;p&gt;An example can be found here: &lt;a class="link" href="https://sirub.com/praxis/mittelmeer/galerie" target="_blank" rel="noopener"
 &gt;SIRUB.com&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="features"&gt;Features
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;click on any image on the page to view it full screen&lt;/li&gt;
&lt;li&gt;use $\leftarrow$/$\rightarrow$ or &lt;code&gt;k&lt;/code&gt;/&lt;code&gt;j&lt;/code&gt; or &lt;code&gt;h&lt;/code&gt;/&lt;code&gt;l&lt;/code&gt; or &lt;code&gt;a&lt;/code&gt;/&lt;code&gt;d&lt;/code&gt; or &lt;code&gt;w&lt;/code&gt;/&lt;code&gt;s&lt;/code&gt; to flip through all images&lt;/li&gt;
&lt;li&gt;hit &lt;code&gt;Escape&lt;/code&gt; or &lt;code&gt;q&lt;/code&gt; or tap anywhere to leave the gallery and return to the page&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="installation"&gt;Installation
&lt;/h1&gt;&lt;p&gt;The installation is simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Just include the &lt;a class="link" href="https://kabus.eu/style/gallery.js" &gt;&lt;code&gt;gallery.js&lt;/code&gt;&lt;/a&gt; file at the end of your &lt;code&gt;html&lt;/code&gt; page&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gallery.js&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;add this to your &lt;code&gt;css&lt;/code&gt; stylesheet:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;#&lt;/span&gt;&lt;span class="nn"&gt;gallery&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;max-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;translate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;-50&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;-50&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt; &lt;span class="kc"&gt;solid&lt;/span&gt; &lt;span class="kc"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;you do &lt;strong&gt;not&lt;/strong&gt; have to change how you embed your images, all &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tags are used for the gallery:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;photo1.jpg&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;photo2.jpg&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h1 id="source-code"&gt;Source code
&lt;/h1&gt;&lt;p&gt;Here are the contents of &lt;a class="link" href="gallery.js" &gt;&lt;code&gt;gallery.js&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Simple JavaScript Gallery v1.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; by Desmond Kabus
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; https://www.kabus.eu/blog/2019/05-26-simple-js-gallery.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;imgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;images&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;img_index_open&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;gallery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;gallery&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;gallery&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;removeChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gallery&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;img_index_open&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;imgs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;img_index_open&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;gallery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;imgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;img_index_open&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;cloneNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;gallery&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;width:auto; height:auto;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;gallery&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;gallery&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;gallery&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onclick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gallery&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;imgs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;imgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;onclick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt; &lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;keydown&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;img_index_open&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;img_index_open&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;imgs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Escape&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;q&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ArrowLeft&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ArrowUp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;h&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;k&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;w&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;img_index_open&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ArrowRight&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ArrowDown&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;l&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;j&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;img_index_open&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Sailing trip in the Baltic Sea</title><link>https://kabus.eu/2019/05/21/segeln-ostsee/</link><pubDate>Tue, 21 May 2019 23:21:00 +0200</pubDate><guid>https://kabus.eu/2019/05/21/segeln-ostsee/</guid><description>&lt;img src="https://kabus.eu/2019/05/21/segeln-ostsee/14-windpark.jpg" alt="Featured image of post Sailing trip in the Baltic Sea" /&gt;&lt;p&gt;This blog post is only available in German.&lt;/p&gt;</description></item><item><title>How to Choose a New Phone</title><link>https://kabus.eu/2019/04/28/how-to-buy-a-phone/</link><pubDate>Sun, 28 Apr 2019 21:02:00 +0200</pubDate><guid>https://kabus.eu/2019/04/28/how-to-buy-a-phone/</guid><description>&lt;img src="https://kabus.eu/2019/04/28/how-to-buy-a-phone/starlte.jpg" alt="Featured image of post How to Choose a New Phone" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;My new phone: the &lt;em&gt;Samsung Galaxy S9&lt;/em&gt;, codename &lt;code&gt;starlte&lt;/code&gt; with
&lt;a class="link" href="https://www.lineageos.org/" target="_blank" rel="noopener"
 &gt;&lt;em&gt;LineageOS&lt;/em&gt;&lt;/a&gt; and &lt;a class="link" href="https://kisslauncher.com/" target="_blank" rel="noopener"
 &gt;&lt;em&gt;KISS
Launcher&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h1 id="introduction"&gt;Introduction
&lt;/h1&gt;&lt;p&gt;It comes down to this:
Is there anything that&amp;rsquo;s an absolute deal breaker and what are your must-haves?&lt;/p&gt;
&lt;p&gt;For me it is absolutely crucial that &lt;a class="link" href="https://www.lineageos.org/" target="_blank" rel="noopener"
 &gt;&lt;em&gt;LineageOS&lt;/em&gt;&lt;/a&gt; is available for my phone, which is a free and open-source phone operating system based on the &lt;em&gt;Android Open Source Project&lt;/em&gt;.
For most people, this is probably not what they want since you void your warranty installing it, but I enjoy it.
It has no bulky apps you cannot remove and avoids the weirdness the phone manufacturers force upon you.
You could use your phone entirely without closed-source Google apps, of which nobody really knows what they are doing.
They could be used to spy on you.
Or not.
But because you can not look into their source code, you will never really know.&lt;/p&gt;
&lt;p&gt;There are some other things, I would like.
I really do not get, why so many phones do not have a headphone jack anymore.
Another trend, I think is really annoying is phones with glass backs.
It&amp;rsquo;s bad enough that one side easily breaks when you drop your phone, so its ridiculous to put glass on the other.
But people really like wireless charging.
I like the concept of charging with coils, but so far the efficiency and speed of charging lacks compared to a simple cable.
I&amp;rsquo;d prefer a more sturdy phone with a metal back.&lt;/p&gt;
&lt;p&gt;So to summarize, this was my wishlist for my ideal phone:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;LineageOS&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;dual SIM&lt;/li&gt;
&lt;li&gt;not gigantic&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://jerryrigeverything.com/" target="_blank" rel="noopener"
 &gt;JerryRigEverything&lt;/a&gt; tested and found durable&lt;/li&gt;
&lt;li&gt;expandable or large storage&lt;/li&gt;
&lt;li&gt;headphone jack&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This stuff would be nice, but is not required:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;small size&lt;/li&gt;
&lt;li&gt;waterproof&lt;/li&gt;
&lt;li&gt;fingerprint scanner&lt;/li&gt;
&lt;li&gt;good camera&lt;/li&gt;
&lt;li&gt;relatively cheap&lt;/li&gt;
&lt;li&gt;USB-C&lt;/li&gt;
&lt;li&gt;fast charging&lt;/li&gt;
&lt;li&gt;large battery&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I actually do not need/want this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;wireless charging&lt;/li&gt;
&lt;li&gt;multiple cameras on the back&lt;/li&gt;
&lt;li&gt;glass back&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But my perfect phone does not exist.&lt;/p&gt;
&lt;h1 id="analysing-some-data"&gt;Analysing some data
&lt;/h1&gt;&lt;p&gt;Fortunately, the &lt;a class="link" href="https://github.com/LineageOS/lineage_wiki/tree/master/_data/devices" target="_blank" rel="noopener"
 &gt;&lt;em&gt;LineageOS&lt;/em&gt; project provides some data&lt;/a&gt; that can easily be analysed to make a better choice.
I just read the &lt;code&gt;yaml&lt;/code&gt; files with &lt;code&gt;python&lt;/code&gt;, applied some filters and drew some plots.
The most eye-opening result has been this graph of approximate size of the screen compared to the area of the front side of the phone:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screen area vs area of the front (in mm²) of LineageOS phones" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="480" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2019/04/28/how-to-buy-a-phone/new-phone-scatter.png" width="640"&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a class="link" href="https://wiki.lineageos.org/devices/starlte" target="_blank" rel="noopener"
 &gt;Samsung Galaxy S9, codename &lt;code&gt;starlte&lt;/code&gt;&lt;/a&gt;, immediately caught my attention.
It has a very large screen for its size.&lt;/p&gt;
&lt;p&gt;I then looked into the details and realized, I liked what I saw:
Headphone jack, waterproof, small with a very good, notch-less screen (another stupid trend).
It basically ticked a lot of the right boxes for me, except for having a glass back and having a relatively small battery compared with the competition.&lt;/p&gt;
&lt;p&gt;It is also &lt;a class="link" href="https://www.theverge.com/2018/3/8/17093588/samsung-galaxy-s9-plus-phone-review" target="_blank" rel="noopener"
 &gt;praised by &lt;em&gt;The Verge&lt;/em&gt;&lt;/a&gt;.
But they also list some flaws &amp;ndash; which are all addressed by &lt;em&gt;LineageOS&lt;/em&gt;.&lt;/p&gt;
&lt;h1 id="actually-buying-the-phone"&gt;Actually buying the phone
&lt;/h1&gt;&lt;p&gt;While there are other nice phones designed to be cheap by less known manufacturers, &lt;code&gt;starlte&lt;/code&gt; was actually the flagship phone by Samsung in the year 2018 and has since steadily gotten cheaper.
It now costs about half the price of when it was originally released.&lt;/p&gt;
&lt;p&gt;So I compared online and waited for a good deal and then ordered it, just a few days later, it arrived.&lt;/p&gt;
&lt;h1 id="checking-out-the-original-software"&gt;Checking out the original software
&lt;/h1&gt;&lt;p&gt;I was actually quite surprised, about how well &lt;em&gt;One UI&lt;/em&gt;, Samsungs current modified version of &lt;em&gt;Android&lt;/em&gt;, suits the phone.
It can be set up to showcase the very high contrast of the screen and has a bunch of nice gimmicks.
I also liked the heart-rate sensor which I found to work quite well
and the feature of &lt;em&gt;One UI&lt;/em&gt;, that you can pull down on many screens such that you can reach everything using just one hand, blowing up the headers which are filled with pretty typography.&lt;/p&gt;
&lt;p&gt;Unfortunately, there is a lot of stuff installed that can not be removed:
lots of &lt;em&gt;Google Apps&lt;/em&gt;,
a full &lt;em&gt;Microsoft Office&lt;/em&gt;,
and several social networks like &lt;em&gt;Facebook&lt;/em&gt; and &lt;em&gt;LinkedIn&lt;/em&gt;, which I do not even use.
And, of course, &lt;em&gt;Bixby&lt;/em&gt;, the most annoying smart assistant with a dedicated button on the side of the phone, which can only be remapped if you create a &lt;em&gt;Samsung account&lt;/em&gt; which I do not want.&lt;/p&gt;
&lt;p&gt;&lt;img alt="An unedited, rescaled sample image taken with the main camera of the Samsung Galaxy S9, taken in the Botanical Garden of the Ruhr-Universität Bochum" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2019/04/28/how-to-buy-a-phone/starlte-plants.jpg" srcset="https://kabus.eu/2019/04/28/how-to-buy-a-phone/starlte-plants_hu_eb29b98e05b242ba.jpg 800w, https://kabus.eu/2019/04/28/how-to-buy-a-phone/starlte-plants.jpg 810w" width="810"&gt;&lt;/p&gt;
&lt;h1 id="assimilating-the-new-phone-to-my-needs"&gt;Assimilating the new phone to my needs
&lt;/h1&gt;&lt;p&gt;After I checked out, that everything works on my phone out of the box, I wanted to really make &lt;code&gt;starlte&lt;/code&gt; my own.
I think you only really own something if you have voided its warranty, so that&amp;rsquo;s what I did by installing another operating system.&lt;/p&gt;
&lt;p&gt;After successfully backing up the original Android image, the &lt;a class="link" href="https://wiki.lineageos.org/devices/starlte/install" target="_blank" rel="noopener"
 &gt;install process&lt;/a&gt; was quite easy, but there was a step missing in these instructions:
I had to download a firmware update which I was made aware of by an actually helpful error message.
It is always a bit thrilling to not know if the phone still works after the installation, but, if you faithfully follow the instructions by &lt;em&gt;LineageOS&lt;/em&gt;, it should work out.&lt;/p&gt;
&lt;p&gt;This time, I decided to install the smallest &lt;a class="link" href="https://opengapps.org/" target="_blank" rel="noopener"
 &gt;&lt;em&gt;Open GApps&lt;/em&gt;&lt;/a&gt; to have the most bare-bones version of the proprietary &lt;em&gt;Google Play Services&lt;/em&gt; (aka &lt;em&gt;Google Services Framework&lt;/em&gt;, GSF), which many apps rely on; they do not function without them.
I think it is crazy that so many developers use them, not knowing, what they actually do in the background.
Google of course can use them to track you and your position, as well as other behavioural patterns, without your knowledge.
I would really like it, if more people would write their apps without this dependency.
On my old phone, the &lt;em&gt;Motorola Moto G 2014&lt;/em&gt; / &lt;code&gt;titan&lt;/code&gt;, I had no Google apps at all and therefore had to miss out on some apps.
Now on my new phone, &lt;code&gt;starlte&lt;/code&gt;, I installed a few Google apps, but I am not signed in to Google, making it a bit harder for them to track me.&lt;/p&gt;
&lt;p&gt;To get good, open-source &lt;em&gt;Android&lt;/em&gt; apps with no dependencies on GSF, you might want to check out &lt;a class="link" href="https://www.f-droid.org/" target="_blank" rel="noopener"
 &gt;&lt;em&gt;F-Droid&lt;/em&gt;&lt;/a&gt;, an alternative FOSS app store for &lt;em&gt;Android&lt;/em&gt;.&lt;/p&gt;
&lt;h1 id="samsung-galaxy-s9-with-lineageos"&gt;Samsung Galaxy S9 with LineageOS
&lt;/h1&gt;&lt;p&gt;Now, with &lt;em&gt;LineageOS&lt;/em&gt;, I&amp;rsquo;m very happy.
I got rid of all the stuff I didn&amp;rsquo;t need, to get a clean, simple phone.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.theverge.com/2018/3/8/17093588/samsung-galaxy-s9-plus-phone-review" target="_blank" rel="noopener"
 &gt;&lt;em&gt;The Verge&lt;/em&gt; listed some flaws in their review&lt;/a&gt;, but these have all been improved upon by &lt;em&gt;LineageOS&lt;/em&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;battery life has improved&lt;/li&gt;
&lt;li&gt;there are way fewer Gimmicks&lt;/li&gt;
&lt;li&gt;no more Bixby&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Samsung has a poor history of updating its phones&amp;rdquo;,
but LineageOS does not.
I am certain that the next few versions of Android will be brought to &lt;code&gt;starlte&lt;/code&gt; by the awesome people creating &lt;em&gt;LineageOS&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unfortunately, the heart-rate sensor is not supported, as well as the different apertures of the camera, since that would require drivers from Samsung, which are not publicly available; these are the only gimmicks I will miss.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Another unedited, rescaled sample image taken with the main camera of the Samsung Galaxy S9, taken in the Botanical Garden of the Ruhr-Universität Bochum" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="756" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2019/04/28/how-to-buy-a-phone/starlte-turtle.jpg" srcset="https://kabus.eu/2019/04/28/how-to-buy-a-phone/starlte-turtle_hu_b98d9216a6dcabf1.jpg 800w, https://kabus.eu/2019/04/28/how-to-buy-a-phone/starlte-turtle.jpg 1008w" width="1008"&gt;&lt;/p&gt;
&lt;h1 id="getting-a-phone-case"&gt;Getting a phone case
&lt;/h1&gt;&lt;p&gt;I would not have thought that this would be this difficult.
First I looked at some phone cases in a shop in the city and then realized that again ordering online is way cheaper.
So I ordered the official &lt;em&gt;Galaxy S9 Hyperknit Cover&lt;/em&gt; by Samsung and it fit the phone a little too well:
The power button was constantly pressed, such that it tried to turn itself off all the time.
This is unacceptable, so I returned it.&lt;/p&gt;
&lt;p&gt;Now, I use the &lt;em&gt;Galaxy S9 Alcantara Cover&lt;/em&gt; by Samsung and like it very much.
It is soft, warm, and grippy.
The buttons are also satisfyingly clicky.&lt;/p&gt;
&lt;h1 id="conclusion"&gt;Conclusion
&lt;/h1&gt;&lt;p&gt;I was probably overthinking the whole process, but I am really glad with the outcome.
I like my new phone very much, it has a great camera, great software due to &lt;em&gt;LineageOS&lt;/em&gt;, looks nice, is just the right size for me, and has an amazing screen.
I hope that it will serve me well in the years to come, I used my last phone &lt;code&gt;titan&lt;/code&gt; for almost four years, so the bar is set!&lt;/p&gt;</description></item><item><title>Sun Protection Factor to the Extreme</title><link>https://kabus.eu/2019/04/08/spf-sun-protection-factor/</link><pubDate>Mon, 08 Apr 2019 23:05:00 +0200</pubDate><guid>https://kabus.eu/2019/04/08/spf-sun-protection-factor/</guid><description>&lt;p&gt;It is well known that the sun protection factor SPF
does not describe how much longer you can stay in the sun
but rather &lt;a class="link" href="https://en.wikipedia.org/wiki/Sunscreen#Sun_protection_factor_and_labeling" target="_blank" rel="noopener"
 &gt;how much of the damaging UV radiation is blocked.&lt;/a&gt;
To get proper protection from UV radiation,
you have to reapply sunscreen multiple times a day
and still avoid staying in direct sunlight for extended periods of time.
In this short post, I want to assume an idealized world, in which sunscreen simply extends the time you can stay in the sun without getting burnt by the SPF.&lt;/p&gt;
&lt;p&gt;(Disclaimer: This is not medical advice!)&lt;/p&gt;
&lt;p&gt;The time you can stay in the sun without getting burnt strongly depends on the &lt;a class="link" href="https://en.wikipedia.org/wiki/Ultraviolet_index" target="_blank" rel="noopener"
 &gt;UV index&lt;/a&gt; $U$, which is a dimensionless quantity proportional to the intensity of the damaging UV radiation.
Many weather services provide this information in their weather forecasts, it is a great way of knowing when you can skip sunscreen and when you definitely need it.&lt;/p&gt;
&lt;p&gt;The time $T$ skin can &amp;ndash; on average &amp;ndash; naturally resist getting burnt for radiation with UV index $U=8$ depends on the &lt;a class="link" href="https://en.wikipedia.org/wiki/Fitzpatrick_scale" target="_blank" rel="noopener"
 &gt;Fitzpatrick skin type&lt;/a&gt;:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;skin type&lt;/th&gt;
 &lt;th&gt;protection time without sunscreen $T$&lt;/th&gt;
 &lt;th&gt;emoji&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;10 min&lt;/td&gt;
 &lt;td&gt;👦🏻&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;15 min&lt;/td&gt;
 &lt;td&gt;🧑🏻&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;20 min&lt;/td&gt;
 &lt;td&gt;👩🏼&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;30 min&lt;/td&gt;
 &lt;td&gt;👨🏽&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;90 min&lt;/td&gt;
 &lt;td&gt;🧒🏾&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;120 min&lt;/td&gt;
 &lt;td&gt;👧🏿&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Assume, that the &lt;em&gt;sun protection factor&lt;/em&gt; SPF $S$ simply extends the time as a factor at $U=8$:
$$
T_8 = S T
$$&lt;/p&gt;
&lt;p&gt;Since the time until you get burnt is anti-proportional to the amount of radiation you are exposed to, we get for other UV indices $U$:
$$
T_U = \frac{8}{U} T_8 = \frac{8}{U} S T
$$
$$
\text{time with sunscreen} = \frac{8}{\text{UV index}} \times \text{SPF} \times \text{skin type time}
$$&lt;/p&gt;
&lt;p&gt;For example, we can now calculate the protected time using sunscreen with the typical SPFs used in the EU for Fitzpatrick skin type 2 with a sun self-resisting time of 15 min at UV index 8:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: right"&gt;$S$&lt;/th&gt;
 &lt;th style="text-align: right"&gt;$U=1$&lt;/th&gt;
 &lt;th style="text-align: right"&gt;$U=2$&lt;/th&gt;
 &lt;th style="text-align: right"&gt;$U=3$&lt;/th&gt;
 &lt;th style="text-align: right"&gt;$U=4$&lt;/th&gt;
 &lt;th style="text-align: right"&gt;$U=5$&lt;/th&gt;
 &lt;th style="text-align: right"&gt;$U=6$&lt;/th&gt;
 &lt;th style="text-align: right"&gt;$U=7$&lt;/th&gt;
 &lt;th style="text-align: right"&gt;$U=8$&lt;/th&gt;
 &lt;th style="text-align: right"&gt;$U=9$&lt;/th&gt;
 &lt;th style="text-align: right"&gt;$U=10$&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: right"&gt;1&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;60 min&lt;/td&gt;
 &lt;td style="text-align: right"&gt;40 min&lt;/td&gt;
 &lt;td style="text-align: right"&gt;30 min&lt;/td&gt;
 &lt;td style="text-align: right"&gt;24 min&lt;/td&gt;
 &lt;td style="text-align: right"&gt;20 min&lt;/td&gt;
 &lt;td style="text-align: right"&gt;17 min&lt;/td&gt;
 &lt;td style="text-align: right"&gt;15 min&lt;/td&gt;
 &lt;td style="text-align: right"&gt;13 min&lt;/td&gt;
 &lt;td style="text-align: right"&gt;12 min&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: right"&gt;6&lt;/td&gt;
 &lt;td style="text-align: right"&gt;12.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;6.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;4.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2.4 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;1.7 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;1.5 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;1.3 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;1.2 h&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: right"&gt;10&lt;/td&gt;
 &lt;td style="text-align: right"&gt;20.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;10.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;6.7 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;5.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;4.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.3 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2.9 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2.5 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2.2 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2.0 h&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: right"&gt;15&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&amp;gt;24 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;15.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;10.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;7.5 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;6.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;5.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;4.3 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.8 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.3 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3.0 h&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: right"&gt;20&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&amp;gt;24 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;20.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;13.3 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;10.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;8.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;6.7 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;5.7 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;5.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;4.4 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;4.0 h&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: right"&gt;25&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&amp;gt;24 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&amp;gt;24 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;16.7 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;12.5 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;10.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;8.3 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;7.1 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;6.2 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;5.6 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;5.0 h&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: right"&gt;30&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&amp;gt;24 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&amp;gt;24 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;20.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;15.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;12.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;10.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;8.6 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;7.5 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;6.7 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;6.0 h&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: right"&gt;50&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&amp;gt;24 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&amp;gt;24 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&amp;gt;24 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&amp;gt;24 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;20.0 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;16.7 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;14.3 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;12.5 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;11.1 h&lt;/td&gt;
 &lt;td style="text-align: right"&gt;10.0 h&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Table: Protected time $T_U$ for skin type 2&lt;/p&gt;
&lt;p&gt;&lt;img alt="Protected time $T_U$ in hours for skin type 2 depending on UV index $U$ and SPF $S$" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="480" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kabus.eu/2019/04/08/spf-sun-protection-factor/spf.png" width="640"&gt;&lt;/p&gt;
&lt;p&gt;If you want to find the minimum SPF $S$ you need for a given UV index $U$ and a given exposure time of $T_U$:
$$
S = \frac 1 8 \frac{T_U}{T_8} U
$$
$$
\text{SPF} = 0.125 \times \frac{\text{exposure time}}{\text{skin type time}} \times \text{UV index}
$$
and for skin type 2 and a time of 8 h, we get a rule of thumb:
$$
S = 4 U
$$
$$
\text{SPF} = 4 \times \text{UV index}
$$&lt;/p&gt;
&lt;p&gt;So for UV index 8, this rule suggests SPF 32, which is sensible.
In conclusion, it is probably better to use higher SPF and do not forget to reapply sunscreen, especially after swimming.
Now, the hot time of the year can begin!&lt;/p&gt;</description></item><item><title>Siebenschläfer ärgere dich nicht</title><link>https://kabus.eu/2019/03/31/mensch-aergere-dich-nicht/</link><pubDate>Sun, 31 Mar 2019 19:32:00 +0200</pubDate><guid>https://kabus.eu/2019/03/31/mensch-aergere-dich-nicht/</guid><description>&lt;img src="https://kabus.eu/2019/03/31/mensch-aergere-dich-nicht/mensch7.png" alt="Featured image of post Siebenschläfer ärgere dich nicht" /&gt;&lt;p&gt;&lt;a class="link" href="https://en.wikipedia.org/wiki/Mensch_%C3%A4rgere_Dich_nicht" target="_blank" rel="noopener"
 &gt;&lt;em&gt;Mensch ärgere dich
nicht&lt;/em&gt;&lt;/a&gt; is a
German game, designed for four players.&lt;/p&gt;
&lt;p&gt;By the way:
In German, &amp;ldquo;&lt;em&gt;sieben&lt;/em&gt;&amp;rdquo; means &amp;ldquo;&lt;em&gt;seven&lt;/em&gt;&amp;rdquo; and a &lt;em&gt;Siebenschläfer&lt;/em&gt; (&lt;a class="link" href="https://en.wikipedia.org/wiki/Edible_dormouse" target="_blank" rel="noopener"
 &gt;edible dormouse&lt;/a&gt;) is someone who sleeps a little too much.&lt;/p&gt;
&lt;p&gt;Personally, I played it only once; it is quite frustrating to play with four pawns each, you just keep kicking each other off all the time.
Maybe it is better if you only use two or three pawns each&amp;hellip;&lt;/p&gt;
&lt;p&gt;Well, I just want to share my design; feel free to print it and play it yourself!
I&amp;rsquo;d love to hear your feedback.&lt;/p&gt;
&lt;p&gt;Download it here as a:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="mensch7.svg" &gt;SVG file&lt;/a&gt; (vector graphics)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="mensch7.png" &gt;PNG file&lt;/a&gt; (works everywhere)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You&amp;rsquo;ll need the &lt;a class="link" href="https://www.fontsquirrel.com/fonts/Sansation" target="_blank" rel="noopener"
 &gt;Sansation font&lt;/a&gt; to display the SVG file.&lt;/p&gt;
&lt;p&gt;If you are wondering which emoji I used, check out &lt;a class="link" href="https://github.com/twitter/twemoji" target="_blank" rel="noopener"
 &gt;Twemoji by Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This work is licensed under a &lt;a class="link" href="http://creativecommons.org/licenses/by-nc/4.0/" target="_blank" rel="noopener"
 &gt;Creative Commons Attribution-NonCommercial 4.0 International License&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>First Blog Entry</title><link>https://kabus.eu/2019/03/13/first-entry/</link><pubDate>Wed, 13 Mar 2019 11:39:00 +0100</pubDate><guid>https://kabus.eu/2019/03/13/first-entry/</guid><description>&lt;p&gt;In contrast to my day job, where I work with scientific literature and citations everyday, I &lt;em&gt;cannot guarantee the correctness&lt;/em&gt; of everything I post here.
I&amp;rsquo;ll try to research for my posts as thoroughly as I think is appropriate; just take everything I post with a grain of salt.
A curious reader might want to verify it with other sources.
After all, I do this just for fun; mainly for myself and hopefully for others as well.
Also, I might express my &lt;em&gt;personal opinion&lt;/em&gt; in the posts&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;; all blog posts reflect my view on the world.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;My blog does not have any rules.
I will just write about whatever I want in my free time.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;I do not want to add a comments section to this blog, since it creates unnecessary bloat which slows down the site and creates lots of other annoyances.
So, if you found anything you like or if you have feedback, check out how to &lt;a class="link" href="https://kabus.eu/desmond" &gt;follow me&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To stay up to date with the latest posts, check out the &lt;a class="link" href="https://kabus.eu/" &gt;blog index&lt;/a&gt;, the &lt;a class="link" href="https://kabus.eu/index.xml" &gt;rss feed&lt;/a&gt; or &lt;a class="link" href="https://kabus.eu/desmond" &gt;follow me&lt;/a&gt; on the few social media I like.&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;which is a &lt;em&gt;no-no&lt;/em&gt; in scientific publications&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item></channel></rss>