diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml
index 67a80b4f..53d843e7 100644
--- a/.github/workflows/draft-pdf.yml
+++ b/.github/workflows/draft-pdf.yml
@@ -14,6 +14,8 @@ jobs:
# Step 1: Checkout repository
- name: Checkout
uses: actions/checkout@v4
+ with:
+ lfs: true
# Step 2: Build draft PDF using Open Journals action
- name: Build draft PDF
@@ -34,4 +36,4 @@ jobs:
uses: EndBug/add-and-commit@v9
with:
message: '(auto) Paper PDF Draft'
- add: 'paper/*.pdf' # or 'paper/*.pdf' for multiple PDFs
\ No newline at end of file
+ add: 'paper/*.pdf' # or 'paper/*.pdf' for multiple PDFs
diff --git a/README.md b/README.md
index 767d4025..8e5a9705 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-
Cardiotensor
+CardioTensor
@@ -14,7 +14,7 @@
[](https://github.com/JosephBrunet/cardiotensor/actions/workflows/ci.yml)
[](https://JosephBrunet.github.io/cardiotensor/)
[](https://app.codacy.com?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
-[](https://github.com/JosephBrunet/cardiotensor/blob/main/LICENSE)
+[](https://github.com/JosephBrunet/cardiotensor/blob/main/LICENSE)
[](https://pypi.python.org/pypi/cardiotensor)
[](https://pypi.org/project/cardiotensor/)
diff --git a/docs/advanced/index.md b/docs/advanced/index.md
index 42730d9a..556c1a9d 100644
--- a/docs/advanced/index.md
+++ b/docs/advanced/index.md
@@ -6,6 +6,7 @@ Pages:
- [Transmural Analysis](./cardio-analysis.md): Extract transmural profiles from angle and FA maps with `cardio-analysis`.
- [Streamlines](./streamlines.md): Generate and visualize 3D streamlines with `cardio-generate-streamlines` and `cardio-visualize-streamlines`.
+- [SLURM Launcher](./slurm-launcher.md): Submit chunked `cardio-tensor` jobs on HPC clusters.
See also:
diff --git a/docs/advanced/slurm-launcher.md b/docs/advanced/slurm-launcher.md
new file mode 100644
index 00000000..485aaa58
--- /dev/null
+++ b/docs/advanced/slurm-launcher.md
@@ -0,0 +1,63 @@
+# SLURM Launcher
+
+Use `cardio-tensor-slurm` to submit chunked orientation jobs as SLURM array tasks.
+
+## What It Does
+
+- Splits a dataset into chunks.
+- Generates a `.slurm` script.
+- Submits one or more SLURM arrays with `sbatch`.
+- Monitors output progress.
+
+The launcher calls `cardio-tensor` on each task with:
+
+```bash
+cardio-tensor --start_index --end_index
+```
+
+## Basic Usage
+
+```bash
+cardio-tensor-slurm path/to/parameters.conf
+```
+
+## Useful Options
+
+```bash
+cardio-tensor-slurm path/to/parameters.conf \
+ --start_index 0 \ # First slice index (inclusive)
+ --end_index 5000 \ # Last slice index (exclusive)
+ --chunk_size 100 \ # Slices processed per SLURM task
+ --time_limit 4:00:00 \ # Wall-time limit for each task
+ --cpus_per_task 8 \ # CPU cores requested per task
+ --mem_gb 64 \ # Memory requested per task (GB)
+ --array_parallel 50 \ # Max concurrent tasks in the SLURM array
+ --partition nice \ # Optional partition/queue name
+ --log_dir /path/to/logs \ # Where SLURM stdout/stderr logs are written
+ --submit_dir /path/to/slurm_scripts # Where generated .slurm scripts are saved
+```
+
+Other useful flags:
+
+- `--no_monitor`: submit jobs and return immediately (do not watch output progress).
+- `--dry_run`: generate the `.slurm` script and print `sbatch` command without submitting.
+
+Run help for the full list:
+
+```bash
+cardio-tensor-slurm -h
+```
+
+## Troubleshooting
+
+- **`sbatch` fails**
+ Verify partition/account/time/memory policy on your cluster.
+
+- **Job fails before running `cardio-tensor`**
+ Check logs in `OUTPUT_PATH/slurm/log/`.
+
+- **No progress in monitor**
+ Confirm output folder permissions and that tasks can write outputs.
+
+- **Want to debug without submitting jobs**
+ Use `--dry_run`.
diff --git a/docs/getting-started/examples.md b/docs/getting-started/examples.md
index 854c770b..27e0588e 100644
--- a/docs/getting-started/examples.md
+++ b/docs/getting-started/examples.md
@@ -13,7 +13,7 @@ The `./examples/` directory contains:
1. **Heart Volume**:
- Path: `./data/635.2um_LADAF-2021-17_heart_overview_/`
- - Description: A downsampled 3D heart image volume designed for testing. The full-resolution dataset is available at the [Human Organ Atlas](https://human-organ-atlas.esrf.fr/datasets/1659197537).
+ - Description: A 3D heart image volume, downsampled 32 times from the original 19.85 µm/voxel dataset, resulting in an effective voxel size of 635.2 µm. The full-resolution dataset is available at the [Human Organ Atlas](https://human-organ-atlas.esrf.fr/datasets/1659197537).
2. **Binary Mask**:
- Path: `./data/mask/`
diff --git a/docs/reference/cli.md b/docs/reference/cli.md
index 0de9d23e..343e4744 100644
--- a/docs/reference/cli.md
+++ b/docs/reference/cli.md
@@ -9,6 +9,10 @@ Compute myocyte orientation from a 3D volume using a configuration file.
- `cardio-tensor`
Computes structure tensor, helix/transverse angle, FA, and eigenvectors.
+- `cardio-tensor-slurm`
+ Submits chunked `cardio-tensor` runs as SLURM array jobs.
+ See [SLURM Launcher](../advanced/slurm-launcher.md).
+
See the [example](../getting-started/examples.md) to get started.
---
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0000.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0000.tif
index 9576920b..cb33b51e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0000.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0000.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0001.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0001.tif
index bee49f65..8a9979c8 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0001.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0001.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0002.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0002.tif
index c1bf93a3..28c3b50d 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0002.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0002.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0003.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0003.tif
index 1bcb38d2..bdbd1bf9 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0003.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0003.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0004.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0004.tif
index dce7a072..b592f1ff 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0004.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0004.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0005.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0005.tif
index daa07354..e7c60c6b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0005.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0005.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0006.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0006.tif
index 75dec509..c9f3602f 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0006.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0006.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0007.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0007.tif
index 7c8b0831..751df7a3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0007.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0007.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0008.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0008.tif
index fa4dc977..182d094e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0008.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0008.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0009.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0009.tif
index a0144946..9e7c06ae 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0009.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0009.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0010.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0010.tif
index 5c5d3e65..0c432b27 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0010.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0010.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0011.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0011.tif
index 5307232b..917d3680 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0011.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0011.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0012.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0012.tif
index c26ed9e3..032ef6e3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0012.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0012.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0013.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0013.tif
index 02f6c61a..a91c4290 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0013.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0013.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0014.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0014.tif
index 4526b90e..a2c038fd 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0014.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0014.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0015.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0015.tif
index 2aa3e85b..d7822872 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0015.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0015.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0016.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0016.tif
index 31bc2758..6948eadf 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0016.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0016.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0017.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0017.tif
index 96a9ae52..b54a61a1 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0017.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0017.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0018.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0018.tif
index 0026000b..206594c3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0018.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0018.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0019.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0019.tif
index 160de10b..b5ef13e6 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0019.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0019.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0020.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0020.tif
index 45dcd11c..84e5c86a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0020.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0020.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0021.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0021.tif
index 53ef9649..74a8ab91 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0021.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0021.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0022.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0022.tif
index 561e08ba..ba49313b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0022.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0022.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0023.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0023.tif
index 7a576854..49f1f540 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0023.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0023.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0024.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0024.tif
index 95fe2494..e55a3170 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0024.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0024.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0025.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0025.tif
index ac7e55d4..998d830e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0025.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0025.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0026.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0026.tif
index 311484d7..ea12d22f 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0026.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0026.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0027.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0027.tif
index cb260c79..97e0d90d 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0027.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0027.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0028.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0028.tif
index 9ee2e4c3..24e31f1a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0028.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0028.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0029.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0029.tif
index c404dc33..d6ede2ac 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0029.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0029.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0030.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0030.tif
index d48e4527..3b3ca2f1 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0030.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0030.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0031.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0031.tif
index b9037721..d8cde5a1 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0031.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0031.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0032.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0032.tif
index 2c00a32e..36a43e5d 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0032.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0032.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0033.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0033.tif
index 8e9e0429..b8c65ec5 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0033.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0033.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0034.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0034.tif
index 172c2c81..21e35ef8 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0034.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0034.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0035.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0035.tif
index 9c46dc0b..cb4b4c39 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0035.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0035.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0036.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0036.tif
index b78d680f..fee0a831 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0036.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0036.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0037.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0037.tif
index 0b5ebe92..2d695d60 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0037.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0037.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0038.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0038.tif
index 2867bdb0..48793de6 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0038.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0038.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0039.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0039.tif
index 3de5d038..36ad40b2 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0039.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0039.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0040.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0040.tif
index a449d776..0407e8a3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0040.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0040.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0041.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0041.tif
index 64d32992..2e430afe 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0041.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0041.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0042.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0042.tif
index 61ffb414..3c2dcd1b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0042.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0042.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0043.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0043.tif
index 03cf7615..2cab17de 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0043.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0043.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0044.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0044.tif
index 52d8cc1a..5c92c54f 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0044.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0044.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0045.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0045.tif
index d7ec4417..4ac32676 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0045.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0045.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0046.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0046.tif
index b0d0634c..8638506f 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0046.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0046.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0047.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0047.tif
index 2a232706..af7e7edf 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0047.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0047.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0048.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0048.tif
index 79082717..41b250b1 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0048.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0048.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0049.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0049.tif
index b37574f4..855db5a0 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0049.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0049.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0050.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0050.tif
index 9019fb73..120e1ef1 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0050.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0050.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0051.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0051.tif
index 225b652a..6073705a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0051.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0051.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0052.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0052.tif
index a2fe3660..c5900a7c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0052.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0052.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0053.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0053.tif
index 41ac6fad..57dfae7b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0053.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0053.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0054.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0054.tif
index 8c5d4774..58e88cd0 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0054.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0054.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0055.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0055.tif
index d2dc327d..f363c917 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0055.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0055.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0056.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0056.tif
index 64fe89fe..e401d750 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0056.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0056.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0057.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0057.tif
index 71c1d4f8..a76432b2 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0057.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0057.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0058.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0058.tif
index 17639b53..6561de84 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0058.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0058.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0059.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0059.tif
index ece6756f..6153dc21 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0059.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0059.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0060.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0060.tif
index 4c831a65..e2262727 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0060.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0060.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0061.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0061.tif
index ccd32a18..079da580 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0061.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0061.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0062.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0062.tif
index 71a38e99..a0ac2c5f 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0062.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0062.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0063.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0063.tif
index 610b5995..02d5fe3b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0063.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0063.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0064.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0064.tif
index a8bf8f06..9dcbe30c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0064.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0064.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0065.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0065.tif
index 8245c129..6734b585 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0065.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0065.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0066.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0066.tif
index 57c431e1..b1cbc885 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0066.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0066.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0067.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0067.tif
index f593d8a0..65f7983d 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0067.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0067.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0068.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0068.tif
index 1ad8df71..a6a22537 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0068.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0068.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0069.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0069.tif
index 1504ddb1..12913dbf 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0069.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0069.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0070.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0070.tif
index ff102652..a71e0f0e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0070.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0070.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0071.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0071.tif
index b0c878d0..289faea2 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0071.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0071.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0072.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0072.tif
index 676ab09e..6028b00b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0072.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0072.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0073.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0073.tif
index c9515a41..5a29b74c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0073.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0073.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0074.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0074.tif
index baaec472..4a3a7f96 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0074.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0074.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0075.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0075.tif
index 3104086e..b853d443 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0075.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0075.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0076.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0076.tif
index 0570ffcf..a16f1d67 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0076.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0076.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0077.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0077.tif
index 61973552..e2747173 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0077.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0077.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0078.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0078.tif
index 5251c538..f17b682e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0078.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0078.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0079.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0079.tif
index 63888153..0aa49ca8 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0079.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0079.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0080.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0080.tif
index 92d12199..a30b0594 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0080.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0080.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0081.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0081.tif
index 82b53870..8c4e21fe 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0081.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0081.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0082.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0082.tif
index 0d756cd2..8fa72b15 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0082.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0082.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0083.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0083.tif
index 83239595..1091cbd5 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0083.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0083.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0084.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0084.tif
index 18fbb350..92d149f6 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0084.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0084.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0085.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0085.tif
index cdded460..69ca27d7 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0085.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0085.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0086.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0086.tif
index e88ab0f1..7ea51054 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0086.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0086.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0087.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0087.tif
index c3621d10..8c90f7fd 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0087.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0087.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0088.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0088.tif
index 5a104420..a993b56b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0088.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0088.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0089.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0089.tif
index 1b9d0d27..4a95dfc3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0089.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0089.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0090.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0090.tif
index 9c5d6b48..e8562a9d 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0090.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0090.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0091.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0091.tif
index 5fdf1592..e6681599 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0091.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0091.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0092.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0092.tif
index 07e11e70..ebb1fb8e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0092.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0092.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0093.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0093.tif
index 93b72fdf..dfda9d6a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0093.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0093.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0094.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0094.tif
index 6ef297af..06aa3a49 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0094.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0094.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0095.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0095.tif
index 7e7b5a00..f8de76ee 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0095.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0095.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0096.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0096.tif
index ebd20292..9162008e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0096.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0096.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0097.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0097.tif
index 8c9e8d60..4194df3c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0097.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0097.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0098.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0098.tif
index f6a342f1..02a0cd83 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0098.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0098.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0099.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0099.tif
index 154d815f..214d701c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0099.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0099.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0100.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0100.tif
index 9686361d..2cd0616a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0100.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0100.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0101.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0101.tif
index 50e328ba..280bee58 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0101.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0101.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0102.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0102.tif
index 5cafdcdc..8e841307 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0102.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0102.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0103.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0103.tif
index a2ae7140..735a0676 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0103.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0103.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0104.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0104.tif
index 163b3d00..bdcc85a3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0104.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0104.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0105.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0105.tif
index 9f083274..8ec4a3b8 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0105.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0105.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0106.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0106.tif
index 336aad30..7a1b0926 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0106.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0106.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0107.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0107.tif
index 54c5ad79..5334a374 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0107.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0107.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0108.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0108.tif
index f08b886a..7624bdb9 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0108.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0108.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0109.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0109.tif
index b7ab962b..a8cd1d41 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0109.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0109.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0110.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0110.tif
index e46f6862..9285975b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0110.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0110.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0111.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0111.tif
index d1baf63e..b4bff14c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0111.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0111.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0112.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0112.tif
index 6d416319..6b7d733d 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0112.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0112.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0113.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0113.tif
index fed6e0d6..1faa2cc2 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0113.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0113.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0114.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0114.tif
index 7bbf9003..e69cc03b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0114.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0114.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0115.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0115.tif
index 0ad29e66..7804e8c3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0115.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0115.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0116.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0116.tif
index 4a6eb8cf..608d36e9 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0116.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0116.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0117.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0117.tif
index 7a3d2ef0..8afdf0a4 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0117.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0117.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0118.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0118.tif
index 6ac59869..dba0797a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0118.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0118.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0119.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0119.tif
index 415e0ff2..444e78a7 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0119.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0119.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0120.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0120.tif
index 3819a35a..c660e1bf 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0120.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0120.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0121.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0121.tif
index 02f1ce31..55d7d031 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0121.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0121.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0122.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0122.tif
index ecd7dd15..bfc1c9db 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0122.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0122.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0123.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0123.tif
index 933760ed..2fecc7dc 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0123.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0123.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0124.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0124.tif
index cca375db..76986b4c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0124.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0124.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0125.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0125.tif
index ba6d34a2..6fd7f4c1 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0125.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0125.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0126.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0126.tif
index 7b241f24..a6e5e076 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0126.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0126.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0127.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0127.tif
index 051de93c..5ee8221d 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0127.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0127.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0128.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0128.tif
index 29cddb82..31c603e4 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0128.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0128.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0129.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0129.tif
index ffeaa410..eeff85bb 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0129.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0129.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0130.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0130.tif
index f5d261cc..b6d9ba59 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0130.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0130.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0131.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0131.tif
index c185946d..239d64a3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0131.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0131.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0132.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0132.tif
index 80d35f4c..213cc230 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0132.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0132.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0133.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0133.tif
index 5659d616..1f5baa3e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0133.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0133.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0134.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0134.tif
index 1f57a8d6..98626ae1 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0134.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0134.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0135.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0135.tif
index 3ff20b3c..d7bb9294 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0135.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0135.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0136.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0136.tif
index dcbe7c7a..a01d120d 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0136.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0136.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0137.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0137.tif
index b11ab6b1..4ac7704c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0137.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0137.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0138.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0138.tif
index c8cbe484..aa5d9bc3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0138.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0138.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0139.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0139.tif
index d9b8d2a4..cbf2af66 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0139.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0139.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0140.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0140.tif
index d6a56bb6..a8c8ab43 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0140.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0140.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0141.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0141.tif
index 8018ba90..ce245244 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0141.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0141.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0142.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0142.tif
index 75a260f7..19300602 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0142.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0142.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0143.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0143.tif
index 9a15a973..f87a9936 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0143.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0143.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0144.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0144.tif
index 2d3f5e23..92d65a0a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0144.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0144.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0145.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0145.tif
index eda1aae6..942f02cf 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0145.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0145.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0146.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0146.tif
index e18802f1..21773f3e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0146.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0146.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0147.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0147.tif
index 136386a0..2852ab24 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0147.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0147.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0148.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0148.tif
index ae043759..2880330e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0148.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0148.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0149.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0149.tif
index ca02f54b..5a2809bb 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0149.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0149.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0150.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0150.tif
index 9d1b4b66..74d5a87c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0150.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0150.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0151.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0151.tif
index 153a17a0..aa862778 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0151.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0151.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0152.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0152.tif
index 0cd1b7c7..4f17cd4c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0152.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0152.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0153.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0153.tif
index 5c0f3d9b..537beb6e 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0153.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0153.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0154.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0154.tif
index 595736b5..13509c30 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0154.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0154.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0155.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0155.tif
index 69677c04..746f7bc4 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0155.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0155.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0156.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0156.tif
index 7e7ca63d..87b4b085 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0156.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0156.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0157.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0157.tif
index bf2ecb2b..3c71586b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0157.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0157.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0158.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0158.tif
index 41d34510..00b884a3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0158.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0158.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0159.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0159.tif
index 0f5ea489..c5e3557a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0159.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0159.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0160.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0160.tif
index 61c307c6..8f3eb1c3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0160.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0160.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0161.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0161.tif
index cae08302..2ddcbe2c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0161.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0161.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0162.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0162.tif
index eebfb562..039231c5 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0162.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0162.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0163.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0163.tif
index 370713ce..559705cb 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0163.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0163.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0164.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0164.tif
index cbe45306..e3140338 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0164.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0164.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0165.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0165.tif
index 7150419f..d2dfa1ad 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0165.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0165.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0166.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0166.tif
index 25d4248e..2884d904 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0166.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0166.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0167.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0167.tif
index 2c4aa7d3..2d3af2fa 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0167.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0167.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0168.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0168.tif
index daf62fdf..91fdfe11 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0168.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0168.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0169.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0169.tif
index 57357caf..f828cbd5 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0169.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0169.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0170.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0170.tif
index b995fd2e..b31403c2 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0170.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0170.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0171.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0171.tif
index cda0f7b1..9fe7e609 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0171.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0171.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0172.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0172.tif
index 0622db3f..e9733aab 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0172.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0172.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0173.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0173.tif
index d4157de0..53a31f77 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0173.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0173.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0174.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0174.tif
index 6bebdf3f..9fa2b8ef 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0174.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0174.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0175.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0175.tif
index dfa8c3a2..a0ee87f2 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0175.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0175.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0176.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0176.tif
index 0c03cc5f..c25c678f 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0176.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0176.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0177.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0177.tif
index 953a14e8..4708206b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0177.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0177.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0178.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0178.tif
index ee1f7092..31d856dc 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0178.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0178.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0179.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0179.tif
index 1e62d238..156b65c3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0179.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0179.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0180.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0180.tif
index 016a2483..84d1e312 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0180.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0180.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0181.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0181.tif
index 34422e70..83ff1b24 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0181.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0181.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0182.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0182.tif
index 798c256b..008ad039 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0182.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0182.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0183.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0183.tif
index 6f404d5b..545c1204 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0183.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0183.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0184.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0184.tif
index 467f4ff5..a7e96d10 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0184.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0184.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0185.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0185.tif
index aa1bc58d..6066870f 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0185.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0185.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0186.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0186.tif
index 77f8d81a..d0906aa8 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0186.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0186.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0187.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0187.tif
index 10395623..fa3e7375 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0187.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0187.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0188.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0188.tif
index 344791b7..630718b1 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0188.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0188.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0189.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0189.tif
index 0f942056..38e44c1a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0189.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0189.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0190.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0190.tif
index 94e4d698..f7dbb611 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0190.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0190.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0191.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0191.tif
index 904d48e7..781a54c7 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0191.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0191.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0192.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0192.tif
index 52aea8c6..7109460d 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0192.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0192.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0193.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0193.tif
index 1ddc1cdf..3e251690 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0193.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0193.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0194.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0194.tif
index 6afac5f6..8905f1b4 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0194.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0194.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0195.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0195.tif
index b3b73ebf..47e9f7ed 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0195.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0195.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0196.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0196.tif
index 41000269..b53b3ffb 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0196.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0196.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0197.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0197.tif
index 6b2b11e6..8e8ba5f6 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0197.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0197.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0198.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0198.tif
index 21c18551..abe18b4f 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0198.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0198.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0199.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0199.tif
index 34c389be..3cf7a148 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0199.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0199.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0200.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0200.tif
index f67d3be1..453b6ad3 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0200.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0200.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0201.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0201.tif
index 420487f0..d1abe160 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0201.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0201.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0202.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0202.tif
index 95e65b22..9739180a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0202.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0202.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0203.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0203.tif
index 0ea889bb..a1b0b864 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0203.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0203.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0204.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0204.tif
index d8a8a888..bb404912 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0204.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0204.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0205.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0205.tif
index dbd9f51c..567390a5 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0205.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0205.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0206.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0206.tif
index d2275f81..71cb1ad2 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0206.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0206.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0207.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0207.tif
index 3d6c1410..3d059930 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0207.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0207.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0208.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0208.tif
index ba58bd5a..e71faedd 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0208.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0208.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0209.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0209.tif
index f6aab6db..fc8d6bc7 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0209.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0209.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0210.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0210.tif
index 46f7e750..95a993ea 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0210.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0210.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0211.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0211.tif
index 44ae360c..6a83de40 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0211.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0211.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0212.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0212.tif
index 1ecafdb8..972c647f 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0212.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0212.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0213.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0213.tif
index 887078b1..cf55cc70 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0213.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0213.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0214.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0214.tif
index f6e1cf7e..70640db0 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0214.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0214.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0215.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0215.tif
index 5997e357..11f6b359 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0215.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0215.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0216.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0216.tif
index a2030ad6..cfd613be 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0216.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0216.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0217.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0217.tif
index 2ac79e4b..44c6dcca 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0217.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0217.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0218.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0218.tif
index a0d3d641..d670d15a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0218.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0218.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0219.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0219.tif
index 5cc100ec..d700a542 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0219.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0219.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0220.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0220.tif
index 1e705ca0..63c1a291 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0220.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0220.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0221.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0221.tif
index 8f4455b7..2346b71c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0221.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0221.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0222.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0222.tif
index e7d92dab..4f37516d 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0222.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0222.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0223.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0223.tif
index 9bd1c88c..543e7afb 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0223.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0223.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0224.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0224.tif
index 5848d9fe..c71fb0d0 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0224.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0224.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0225.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0225.tif
index 3b62059d..c9fccbb5 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0225.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0225.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0226.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0226.tif
index bf0374d1..9526229f 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0226.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0226.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0227.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0227.tif
index 21023644..75927e3a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0227.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0227.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0228.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0228.tif
index 2cc0b69a..4f12b6fa 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0228.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0228.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0229.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0229.tif
index 5cb17ac3..752d6e7a 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0229.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0229.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0230.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0230.tif
index 02423271..28710099 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0230.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0230.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0231.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0231.tif
index 7e4f057d..3a6b866c 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0231.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0231.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0232.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0232.tif
index cc874f64..971b7fb4 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0232.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0232.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0233.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0233.tif
index bfaef69d..0746aba6 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0233.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0233.tif differ
diff --git a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0234.tif b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0234.tif
index 538ec027..ba72cb5b 100644
Binary files a/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0234.tif and b/examples/data/635.2um_LADAF-2021-17_heart_overview_/635.2um_LADAF-2021-17_heart_overview_0234.tif differ
diff --git a/examples/data/mask/binary_000000.tif b/examples/data/mask/binary_000000.tif
index 9638a87e..4ae8e38b 100644
Binary files a/examples/data/mask/binary_000000.tif and b/examples/data/mask/binary_000000.tif differ
diff --git a/examples/data/mask/binary_000001.tif b/examples/data/mask/binary_000001.tif
index 205fe267..d53040b3 100644
Binary files a/examples/data/mask/binary_000001.tif and b/examples/data/mask/binary_000001.tif differ
diff --git a/examples/data/mask/binary_000002.tif b/examples/data/mask/binary_000002.tif
index 958ade2a..7fba2c26 100644
Binary files a/examples/data/mask/binary_000002.tif and b/examples/data/mask/binary_000002.tif differ
diff --git a/examples/data/mask/binary_000003.tif b/examples/data/mask/binary_000003.tif
index 69279a82..818bb032 100644
Binary files a/examples/data/mask/binary_000003.tif and b/examples/data/mask/binary_000003.tif differ
diff --git a/examples/data/mask/binary_000004.tif b/examples/data/mask/binary_000004.tif
index 75e270c8..02bd2862 100644
Binary files a/examples/data/mask/binary_000004.tif and b/examples/data/mask/binary_000004.tif differ
diff --git a/examples/data/mask/binary_000005.tif b/examples/data/mask/binary_000005.tif
index 620bc14e..83279a17 100644
Binary files a/examples/data/mask/binary_000005.tif and b/examples/data/mask/binary_000005.tif differ
diff --git a/examples/data/mask/binary_000006.tif b/examples/data/mask/binary_000006.tif
index 4e23c2c9..0baef09c 100644
Binary files a/examples/data/mask/binary_000006.tif and b/examples/data/mask/binary_000006.tif differ
diff --git a/examples/data/mask/binary_000007.tif b/examples/data/mask/binary_000007.tif
index 62c27970..c7b04da1 100644
Binary files a/examples/data/mask/binary_000007.tif and b/examples/data/mask/binary_000007.tif differ
diff --git a/examples/data/mask/binary_000008.tif b/examples/data/mask/binary_000008.tif
index c7c01633..45e8e4c6 100644
Binary files a/examples/data/mask/binary_000008.tif and b/examples/data/mask/binary_000008.tif differ
diff --git a/examples/data/mask/binary_000009.tif b/examples/data/mask/binary_000009.tif
index 15e487cb..9d6f7ed5 100644
Binary files a/examples/data/mask/binary_000009.tif and b/examples/data/mask/binary_000009.tif differ
diff --git a/examples/data/mask/binary_000010.tif b/examples/data/mask/binary_000010.tif
index b47f2c9d..6a8222dc 100644
Binary files a/examples/data/mask/binary_000010.tif and b/examples/data/mask/binary_000010.tif differ
diff --git a/examples/data/mask/binary_000011.tif b/examples/data/mask/binary_000011.tif
index ce902c0a..5f8436af 100644
Binary files a/examples/data/mask/binary_000011.tif and b/examples/data/mask/binary_000011.tif differ
diff --git a/examples/data/mask/binary_000012.tif b/examples/data/mask/binary_000012.tif
index 5dfe3e70..3605ed52 100644
Binary files a/examples/data/mask/binary_000012.tif and b/examples/data/mask/binary_000012.tif differ
diff --git a/examples/data/mask/binary_000013.tif b/examples/data/mask/binary_000013.tif
index 33adcae6..d0589c52 100644
Binary files a/examples/data/mask/binary_000013.tif and b/examples/data/mask/binary_000013.tif differ
diff --git a/examples/data/mask/binary_000014.tif b/examples/data/mask/binary_000014.tif
index 2fae303d..d9902b54 100644
Binary files a/examples/data/mask/binary_000014.tif and b/examples/data/mask/binary_000014.tif differ
diff --git a/examples/data/mask/binary_000015.tif b/examples/data/mask/binary_000015.tif
index 6aadf7bb..8e89678c 100644
Binary files a/examples/data/mask/binary_000015.tif and b/examples/data/mask/binary_000015.tif differ
diff --git a/examples/data/mask/binary_000016.tif b/examples/data/mask/binary_000016.tif
index 7f74f4a6..78f49911 100644
Binary files a/examples/data/mask/binary_000016.tif and b/examples/data/mask/binary_000016.tif differ
diff --git a/examples/data/mask/binary_000017.tif b/examples/data/mask/binary_000017.tif
index 2669096a..ddcb0f42 100644
Binary files a/examples/data/mask/binary_000017.tif and b/examples/data/mask/binary_000017.tif differ
diff --git a/examples/data/mask/binary_000018.tif b/examples/data/mask/binary_000018.tif
index ee11ba61..3a45ad28 100644
Binary files a/examples/data/mask/binary_000018.tif and b/examples/data/mask/binary_000018.tif differ
diff --git a/examples/data/mask/binary_000019.tif b/examples/data/mask/binary_000019.tif
index 1aac60ff..7901c641 100644
Binary files a/examples/data/mask/binary_000019.tif and b/examples/data/mask/binary_000019.tif differ
diff --git a/examples/data/mask/binary_000020.tif b/examples/data/mask/binary_000020.tif
index a8a6ff83..cb643430 100644
Binary files a/examples/data/mask/binary_000020.tif and b/examples/data/mask/binary_000020.tif differ
diff --git a/examples/data/mask/binary_000021.tif b/examples/data/mask/binary_000021.tif
index 07131827..8075180f 100644
Binary files a/examples/data/mask/binary_000021.tif and b/examples/data/mask/binary_000021.tif differ
diff --git a/examples/data/mask/binary_000022.tif b/examples/data/mask/binary_000022.tif
index 9883731f..4646ebe6 100644
Binary files a/examples/data/mask/binary_000022.tif and b/examples/data/mask/binary_000022.tif differ
diff --git a/examples/data/mask/binary_000023.tif b/examples/data/mask/binary_000023.tif
index 2e4b8842..b8ffc2e4 100644
Binary files a/examples/data/mask/binary_000023.tif and b/examples/data/mask/binary_000023.tif differ
diff --git a/examples/data/mask/binary_000024.tif b/examples/data/mask/binary_000024.tif
index b931a531..d3e6e9e4 100644
Binary files a/examples/data/mask/binary_000024.tif and b/examples/data/mask/binary_000024.tif differ
diff --git a/examples/data/mask/binary_000025.tif b/examples/data/mask/binary_000025.tif
index aa0df486..af76f0f0 100644
Binary files a/examples/data/mask/binary_000025.tif and b/examples/data/mask/binary_000025.tif differ
diff --git a/examples/data/mask/binary_000026.tif b/examples/data/mask/binary_000026.tif
index 0aa65be5..d202a9ea 100644
Binary files a/examples/data/mask/binary_000026.tif and b/examples/data/mask/binary_000026.tif differ
diff --git a/examples/data/mask/binary_000027.tif b/examples/data/mask/binary_000027.tif
index 7b9f8892..1911a18e 100644
Binary files a/examples/data/mask/binary_000027.tif and b/examples/data/mask/binary_000027.tif differ
diff --git a/examples/data/mask/binary_000028.tif b/examples/data/mask/binary_000028.tif
index e0396573..dda5c627 100644
Binary files a/examples/data/mask/binary_000028.tif and b/examples/data/mask/binary_000028.tif differ
diff --git a/examples/data/mask/binary_000029.tif b/examples/data/mask/binary_000029.tif
index 6a10b290..23957da3 100644
Binary files a/examples/data/mask/binary_000029.tif and b/examples/data/mask/binary_000029.tif differ
diff --git a/examples/data/mask/binary_000030.tif b/examples/data/mask/binary_000030.tif
index 05612869..1461f926 100644
Binary files a/examples/data/mask/binary_000030.tif and b/examples/data/mask/binary_000030.tif differ
diff --git a/examples/data/mask/binary_000031.tif b/examples/data/mask/binary_000031.tif
index 6c8ba734..dc9362cc 100644
Binary files a/examples/data/mask/binary_000031.tif and b/examples/data/mask/binary_000031.tif differ
diff --git a/examples/data/mask/binary_000032.tif b/examples/data/mask/binary_000032.tif
index d77278e6..76b6ef40 100644
Binary files a/examples/data/mask/binary_000032.tif and b/examples/data/mask/binary_000032.tif differ
diff --git a/examples/data/mask/binary_000033.tif b/examples/data/mask/binary_000033.tif
index 87600eba..63f75d60 100644
Binary files a/examples/data/mask/binary_000033.tif and b/examples/data/mask/binary_000033.tif differ
diff --git a/examples/data/mask/binary_000034.tif b/examples/data/mask/binary_000034.tif
index ede6c733..4f9727a0 100644
Binary files a/examples/data/mask/binary_000034.tif and b/examples/data/mask/binary_000034.tif differ
diff --git a/examples/data/mask/binary_000035.tif b/examples/data/mask/binary_000035.tif
index 1e1888f9..0e1ff68a 100644
Binary files a/examples/data/mask/binary_000035.tif and b/examples/data/mask/binary_000035.tif differ
diff --git a/examples/data/mask/binary_000036.tif b/examples/data/mask/binary_000036.tif
index 6e298280..afb1a7e2 100644
Binary files a/examples/data/mask/binary_000036.tif and b/examples/data/mask/binary_000036.tif differ
diff --git a/examples/data/mask/binary_000037.tif b/examples/data/mask/binary_000037.tif
index d7577981..37260ae2 100644
Binary files a/examples/data/mask/binary_000037.tif and b/examples/data/mask/binary_000037.tif differ
diff --git a/examples/data/mask/binary_000038.tif b/examples/data/mask/binary_000038.tif
index 8bcece59..8c549574 100644
Binary files a/examples/data/mask/binary_000038.tif and b/examples/data/mask/binary_000038.tif differ
diff --git a/examples/data/mask/binary_000039.tif b/examples/data/mask/binary_000039.tif
index 6a85fe23..5bb44501 100644
Binary files a/examples/data/mask/binary_000039.tif and b/examples/data/mask/binary_000039.tif differ
diff --git a/examples/data/mask/binary_000040.tif b/examples/data/mask/binary_000040.tif
index 0a91ebe5..39b8ec7a 100644
Binary files a/examples/data/mask/binary_000040.tif and b/examples/data/mask/binary_000040.tif differ
diff --git a/examples/data/mask/binary_000041.tif b/examples/data/mask/binary_000041.tif
index d7fc7205..e1963d85 100644
Binary files a/examples/data/mask/binary_000041.tif and b/examples/data/mask/binary_000041.tif differ
diff --git a/examples/data/mask/binary_000042.tif b/examples/data/mask/binary_000042.tif
index ebf3a2b3..87374217 100644
Binary files a/examples/data/mask/binary_000042.tif and b/examples/data/mask/binary_000042.tif differ
diff --git a/examples/data/mask/binary_000043.tif b/examples/data/mask/binary_000043.tif
index 9a8fd175..0361f0c0 100644
Binary files a/examples/data/mask/binary_000043.tif and b/examples/data/mask/binary_000043.tif differ
diff --git a/examples/data/mask/binary_000044.tif b/examples/data/mask/binary_000044.tif
index b43da189..9f410faf 100644
Binary files a/examples/data/mask/binary_000044.tif and b/examples/data/mask/binary_000044.tif differ
diff --git a/examples/data/mask/binary_000045.tif b/examples/data/mask/binary_000045.tif
index 23c8ceb1..0412613d 100644
Binary files a/examples/data/mask/binary_000045.tif and b/examples/data/mask/binary_000045.tif differ
diff --git a/examples/data/mask/binary_000046.tif b/examples/data/mask/binary_000046.tif
index d82d8c36..881c85c4 100644
Binary files a/examples/data/mask/binary_000046.tif and b/examples/data/mask/binary_000046.tif differ
diff --git a/examples/data/mask/binary_000047.tif b/examples/data/mask/binary_000047.tif
index aa08c480..50d56a62 100644
Binary files a/examples/data/mask/binary_000047.tif and b/examples/data/mask/binary_000047.tif differ
diff --git a/examples/data/mask/binary_000048.tif b/examples/data/mask/binary_000048.tif
index 5e4683cb..d1a8bdf4 100644
Binary files a/examples/data/mask/binary_000048.tif and b/examples/data/mask/binary_000048.tif differ
diff --git a/examples/data/mask/binary_000049.tif b/examples/data/mask/binary_000049.tif
index ab11d5b6..b4cef82b 100644
Binary files a/examples/data/mask/binary_000049.tif and b/examples/data/mask/binary_000049.tif differ
diff --git a/examples/data/mask/binary_000050.tif b/examples/data/mask/binary_000050.tif
index 8c16e41e..84fc8404 100644
Binary files a/examples/data/mask/binary_000050.tif and b/examples/data/mask/binary_000050.tif differ
diff --git a/examples/data/mask/binary_000051.tif b/examples/data/mask/binary_000051.tif
index 3f485a1b..7de05e14 100644
Binary files a/examples/data/mask/binary_000051.tif and b/examples/data/mask/binary_000051.tif differ
diff --git a/examples/data/mask/binary_000052.tif b/examples/data/mask/binary_000052.tif
index a6368b96..25f8ad3c 100644
Binary files a/examples/data/mask/binary_000052.tif and b/examples/data/mask/binary_000052.tif differ
diff --git a/examples/data/mask/binary_000053.tif b/examples/data/mask/binary_000053.tif
index 575bcc3a..b927f8d9 100644
Binary files a/examples/data/mask/binary_000053.tif and b/examples/data/mask/binary_000053.tif differ
diff --git a/examples/data/mask/binary_000054.tif b/examples/data/mask/binary_000054.tif
index 13ba854d..08b32951 100644
Binary files a/examples/data/mask/binary_000054.tif and b/examples/data/mask/binary_000054.tif differ
diff --git a/examples/data/mask/binary_000055.tif b/examples/data/mask/binary_000055.tif
index 2b8728fa..865fec28 100644
Binary files a/examples/data/mask/binary_000055.tif and b/examples/data/mask/binary_000055.tif differ
diff --git a/examples/data/mask/binary_000056.tif b/examples/data/mask/binary_000056.tif
index a82e597d..73d2df82 100644
Binary files a/examples/data/mask/binary_000056.tif and b/examples/data/mask/binary_000056.tif differ
diff --git a/examples/data/mask/binary_000057.tif b/examples/data/mask/binary_000057.tif
index 033f9635..ea381608 100644
Binary files a/examples/data/mask/binary_000057.tif and b/examples/data/mask/binary_000057.tif differ
diff --git a/examples/data/mask/binary_000058.tif b/examples/data/mask/binary_000058.tif
index 74930108..3dab4a72 100644
Binary files a/examples/data/mask/binary_000058.tif and b/examples/data/mask/binary_000058.tif differ
diff --git a/examples/data/mask/binary_000059.tif b/examples/data/mask/binary_000059.tif
index e1738418..82ca8a90 100644
Binary files a/examples/data/mask/binary_000059.tif and b/examples/data/mask/binary_000059.tif differ
diff --git a/examples/data/mask/binary_000060.tif b/examples/data/mask/binary_000060.tif
index 557ac55d..cefcca06 100644
Binary files a/examples/data/mask/binary_000060.tif and b/examples/data/mask/binary_000060.tif differ
diff --git a/examples/data/mask/binary_000061.tif b/examples/data/mask/binary_000061.tif
index 2616d514..3d680ad6 100644
Binary files a/examples/data/mask/binary_000061.tif and b/examples/data/mask/binary_000061.tif differ
diff --git a/examples/data/mask/binary_000062.tif b/examples/data/mask/binary_000062.tif
index 9850cdbd..2b589f50 100644
Binary files a/examples/data/mask/binary_000062.tif and b/examples/data/mask/binary_000062.tif differ
diff --git a/examples/data/mask/binary_000063.tif b/examples/data/mask/binary_000063.tif
index 31deb19d..deca6ba2 100644
Binary files a/examples/data/mask/binary_000063.tif and b/examples/data/mask/binary_000063.tif differ
diff --git a/examples/data/mask/binary_000064.tif b/examples/data/mask/binary_000064.tif
index b34143e0..7420ad8d 100644
Binary files a/examples/data/mask/binary_000064.tif and b/examples/data/mask/binary_000064.tif differ
diff --git a/examples/data/mask/binary_000065.tif b/examples/data/mask/binary_000065.tif
index 6b04a960..1a6a1bf3 100644
Binary files a/examples/data/mask/binary_000065.tif and b/examples/data/mask/binary_000065.tif differ
diff --git a/examples/data/mask/binary_000066.tif b/examples/data/mask/binary_000066.tif
index 5ac54a4a..c0874dae 100644
Binary files a/examples/data/mask/binary_000066.tif and b/examples/data/mask/binary_000066.tif differ
diff --git a/examples/data/mask/binary_000067.tif b/examples/data/mask/binary_000067.tif
index 4baace71..e51681c6 100644
Binary files a/examples/data/mask/binary_000067.tif and b/examples/data/mask/binary_000067.tif differ
diff --git a/examples/data/mask/binary_000068.tif b/examples/data/mask/binary_000068.tif
index a02324eb..5fad01f3 100644
Binary files a/examples/data/mask/binary_000068.tif and b/examples/data/mask/binary_000068.tif differ
diff --git a/examples/data/mask/binary_000069.tif b/examples/data/mask/binary_000069.tif
index a08cfd00..d700fb5e 100644
Binary files a/examples/data/mask/binary_000069.tif and b/examples/data/mask/binary_000069.tif differ
diff --git a/examples/data/mask/binary_000070.tif b/examples/data/mask/binary_000070.tif
index 0198af59..1f09fa35 100644
Binary files a/examples/data/mask/binary_000070.tif and b/examples/data/mask/binary_000070.tif differ
diff --git a/examples/data/mask/binary_000071.tif b/examples/data/mask/binary_000071.tif
index 3248105e..8b9b9e9a 100644
Binary files a/examples/data/mask/binary_000071.tif and b/examples/data/mask/binary_000071.tif differ
diff --git a/examples/data/mask/binary_000072.tif b/examples/data/mask/binary_000072.tif
index 9a1d4aed..ec0da5bc 100644
Binary files a/examples/data/mask/binary_000072.tif and b/examples/data/mask/binary_000072.tif differ
diff --git a/examples/data/mask/binary_000073.tif b/examples/data/mask/binary_000073.tif
index 53c8d7d5..b0ca6f8a 100644
Binary files a/examples/data/mask/binary_000073.tif and b/examples/data/mask/binary_000073.tif differ
diff --git a/examples/data/mask/binary_000074.tif b/examples/data/mask/binary_000074.tif
index 1a455943..52e40681 100644
Binary files a/examples/data/mask/binary_000074.tif and b/examples/data/mask/binary_000074.tif differ
diff --git a/examples/data/mask/binary_000075.tif b/examples/data/mask/binary_000075.tif
index c62f6948..867e7ab4 100644
Binary files a/examples/data/mask/binary_000075.tif and b/examples/data/mask/binary_000075.tif differ
diff --git a/examples/data/mask/binary_000076.tif b/examples/data/mask/binary_000076.tif
index e6de2aa7..d32cdb18 100644
Binary files a/examples/data/mask/binary_000076.tif and b/examples/data/mask/binary_000076.tif differ
diff --git a/examples/data/mask/binary_000077.tif b/examples/data/mask/binary_000077.tif
index 0b4867a3..43465436 100644
Binary files a/examples/data/mask/binary_000077.tif and b/examples/data/mask/binary_000077.tif differ
diff --git a/examples/data/mask/binary_000078.tif b/examples/data/mask/binary_000078.tif
index 2c1c791d..f870198f 100644
Binary files a/examples/data/mask/binary_000078.tif and b/examples/data/mask/binary_000078.tif differ
diff --git a/examples/data/mask/binary_000079.tif b/examples/data/mask/binary_000079.tif
index 2bbb05c9..52be621f 100644
Binary files a/examples/data/mask/binary_000079.tif and b/examples/data/mask/binary_000079.tif differ
diff --git a/examples/data/mask/binary_000080.tif b/examples/data/mask/binary_000080.tif
index 0cb464ae..91d35ebd 100644
Binary files a/examples/data/mask/binary_000080.tif and b/examples/data/mask/binary_000080.tif differ
diff --git a/examples/data/mask/binary_000081.tif b/examples/data/mask/binary_000081.tif
index 36aa55c1..81d39087 100644
Binary files a/examples/data/mask/binary_000081.tif and b/examples/data/mask/binary_000081.tif differ
diff --git a/examples/data/mask/binary_000082.tif b/examples/data/mask/binary_000082.tif
index 91c7a17d..fd16140d 100644
Binary files a/examples/data/mask/binary_000082.tif and b/examples/data/mask/binary_000082.tif differ
diff --git a/examples/data/mask/binary_000083.tif b/examples/data/mask/binary_000083.tif
index 5d75d8a0..2cefe6eb 100644
Binary files a/examples/data/mask/binary_000083.tif and b/examples/data/mask/binary_000083.tif differ
diff --git a/examples/data/mask/binary_000084.tif b/examples/data/mask/binary_000084.tif
index 836d9e36..19574087 100644
Binary files a/examples/data/mask/binary_000084.tif and b/examples/data/mask/binary_000084.tif differ
diff --git a/examples/data/mask/binary_000085.tif b/examples/data/mask/binary_000085.tif
index 05e80e0c..cbf8549a 100644
Binary files a/examples/data/mask/binary_000085.tif and b/examples/data/mask/binary_000085.tif differ
diff --git a/examples/data/mask/binary_000086.tif b/examples/data/mask/binary_000086.tif
index 81c8e1a8..f4583f2c 100644
Binary files a/examples/data/mask/binary_000086.tif and b/examples/data/mask/binary_000086.tif differ
diff --git a/examples/data/mask/binary_000087.tif b/examples/data/mask/binary_000087.tif
index b78e5036..7dc629da 100644
Binary files a/examples/data/mask/binary_000087.tif and b/examples/data/mask/binary_000087.tif differ
diff --git a/examples/data/mask/binary_000088.tif b/examples/data/mask/binary_000088.tif
index 151d347e..f7bb5128 100644
Binary files a/examples/data/mask/binary_000088.tif and b/examples/data/mask/binary_000088.tif differ
diff --git a/examples/data/mask/binary_000089.tif b/examples/data/mask/binary_000089.tif
index 14f1a6d6..7434849d 100644
Binary files a/examples/data/mask/binary_000089.tif and b/examples/data/mask/binary_000089.tif differ
diff --git a/examples/data/mask/binary_000090.tif b/examples/data/mask/binary_000090.tif
index 37ede387..3b5372b5 100644
Binary files a/examples/data/mask/binary_000090.tif and b/examples/data/mask/binary_000090.tif differ
diff --git a/examples/data/mask/binary_000091.tif b/examples/data/mask/binary_000091.tif
index 5ad38460..bdcb624c 100644
Binary files a/examples/data/mask/binary_000091.tif and b/examples/data/mask/binary_000091.tif differ
diff --git a/examples/data/mask/binary_000092.tif b/examples/data/mask/binary_000092.tif
index 0bb7da84..4358ce68 100644
Binary files a/examples/data/mask/binary_000092.tif and b/examples/data/mask/binary_000092.tif differ
diff --git a/examples/data/mask/binary_000093.tif b/examples/data/mask/binary_000093.tif
index c2cb1ab7..b1525131 100644
Binary files a/examples/data/mask/binary_000093.tif and b/examples/data/mask/binary_000093.tif differ
diff --git a/examples/data/mask/binary_000094.tif b/examples/data/mask/binary_000094.tif
index 10b4dc5e..1ee9473c 100644
Binary files a/examples/data/mask/binary_000094.tif and b/examples/data/mask/binary_000094.tif differ
diff --git a/examples/data/mask/binary_000095.tif b/examples/data/mask/binary_000095.tif
index 87663415..106d40c7 100644
Binary files a/examples/data/mask/binary_000095.tif and b/examples/data/mask/binary_000095.tif differ
diff --git a/examples/data/mask/binary_000096.tif b/examples/data/mask/binary_000096.tif
index 25ee450a..81c91535 100644
Binary files a/examples/data/mask/binary_000096.tif and b/examples/data/mask/binary_000096.tif differ
diff --git a/examples/data/mask/binary_000097.tif b/examples/data/mask/binary_000097.tif
index 125e08a5..409fc5df 100644
Binary files a/examples/data/mask/binary_000097.tif and b/examples/data/mask/binary_000097.tif differ
diff --git a/examples/data/mask/binary_000098.tif b/examples/data/mask/binary_000098.tif
index 6d838831..03d6b03a 100644
Binary files a/examples/data/mask/binary_000098.tif and b/examples/data/mask/binary_000098.tif differ
diff --git a/examples/data/mask/binary_000099.tif b/examples/data/mask/binary_000099.tif
index 5024a744..c8f0bc37 100644
Binary files a/examples/data/mask/binary_000099.tif and b/examples/data/mask/binary_000099.tif differ
diff --git a/examples/data/mask/binary_000100.tif b/examples/data/mask/binary_000100.tif
index 055e1518..b1e9d100 100644
Binary files a/examples/data/mask/binary_000100.tif and b/examples/data/mask/binary_000100.tif differ
diff --git a/examples/data/mask/binary_000101.tif b/examples/data/mask/binary_000101.tif
index 9c3e8853..a06c53a9 100644
Binary files a/examples/data/mask/binary_000101.tif and b/examples/data/mask/binary_000101.tif differ
diff --git a/examples/data/mask/binary_000102.tif b/examples/data/mask/binary_000102.tif
index 2c53a392..ccc0d3e3 100644
Binary files a/examples/data/mask/binary_000102.tif and b/examples/data/mask/binary_000102.tif differ
diff --git a/examples/data/mask/binary_000103.tif b/examples/data/mask/binary_000103.tif
index 9cd7b625..7f8bba43 100644
Binary files a/examples/data/mask/binary_000103.tif and b/examples/data/mask/binary_000103.tif differ
diff --git a/examples/data/mask/binary_000104.tif b/examples/data/mask/binary_000104.tif
index 5e4f97a0..5ed9c9bd 100644
Binary files a/examples/data/mask/binary_000104.tif and b/examples/data/mask/binary_000104.tif differ
diff --git a/examples/data/mask/binary_000105.tif b/examples/data/mask/binary_000105.tif
index 02cdf0ba..4983d21d 100644
Binary files a/examples/data/mask/binary_000105.tif and b/examples/data/mask/binary_000105.tif differ
diff --git a/examples/data/mask/binary_000106.tif b/examples/data/mask/binary_000106.tif
index c09ddac9..baa36fec 100644
Binary files a/examples/data/mask/binary_000106.tif and b/examples/data/mask/binary_000106.tif differ
diff --git a/examples/data/mask/binary_000107.tif b/examples/data/mask/binary_000107.tif
index 84330142..1f49445e 100644
Binary files a/examples/data/mask/binary_000107.tif and b/examples/data/mask/binary_000107.tif differ
diff --git a/examples/data/mask/binary_000108.tif b/examples/data/mask/binary_000108.tif
index 7d65c7fd..3dcb9643 100644
Binary files a/examples/data/mask/binary_000108.tif and b/examples/data/mask/binary_000108.tif differ
diff --git a/examples/data/mask/binary_000109.tif b/examples/data/mask/binary_000109.tif
index 2ed4c878..518d2a72 100644
Binary files a/examples/data/mask/binary_000109.tif and b/examples/data/mask/binary_000109.tif differ
diff --git a/examples/data/mask/binary_000110.tif b/examples/data/mask/binary_000110.tif
index ef6e67fd..5e2e559a 100644
Binary files a/examples/data/mask/binary_000110.tif and b/examples/data/mask/binary_000110.tif differ
diff --git a/examples/data/mask/binary_000111.tif b/examples/data/mask/binary_000111.tif
index 03a7f4d0..fdc2a402 100644
Binary files a/examples/data/mask/binary_000111.tif and b/examples/data/mask/binary_000111.tif differ
diff --git a/examples/data/mask/binary_000112.tif b/examples/data/mask/binary_000112.tif
index 67a9baf3..d3c551ef 100644
Binary files a/examples/data/mask/binary_000112.tif and b/examples/data/mask/binary_000112.tif differ
diff --git a/examples/data/mask/binary_000113.tif b/examples/data/mask/binary_000113.tif
index fa2eb4d0..c7e4ef19 100644
Binary files a/examples/data/mask/binary_000113.tif and b/examples/data/mask/binary_000113.tif differ
diff --git a/examples/data/mask/binary_000114.tif b/examples/data/mask/binary_000114.tif
index 09840ff1..053a95d4 100644
Binary files a/examples/data/mask/binary_000114.tif and b/examples/data/mask/binary_000114.tif differ
diff --git a/examples/data/mask/binary_000115.tif b/examples/data/mask/binary_000115.tif
index 387707d0..e5019ee8 100644
Binary files a/examples/data/mask/binary_000115.tif and b/examples/data/mask/binary_000115.tif differ
diff --git a/examples/data/mask/binary_000116.tif b/examples/data/mask/binary_000116.tif
index e0f3a837..c9dd9c56 100644
Binary files a/examples/data/mask/binary_000116.tif and b/examples/data/mask/binary_000116.tif differ
diff --git a/examples/data/mask/binary_000117.tif b/examples/data/mask/binary_000117.tif
index d08e5954..27758371 100644
Binary files a/examples/data/mask/binary_000117.tif and b/examples/data/mask/binary_000117.tif differ
diff --git a/examples/data/mask/binary_000118.tif b/examples/data/mask/binary_000118.tif
index 1d22e29c..bc7b078f 100644
Binary files a/examples/data/mask/binary_000118.tif and b/examples/data/mask/binary_000118.tif differ
diff --git a/examples/data/mask/binary_000119.tif b/examples/data/mask/binary_000119.tif
index 2e4d6067..1a2db854 100644
Binary files a/examples/data/mask/binary_000119.tif and b/examples/data/mask/binary_000119.tif differ
diff --git a/examples/data/mask/binary_000120.tif b/examples/data/mask/binary_000120.tif
index e14b416b..de867675 100644
Binary files a/examples/data/mask/binary_000120.tif and b/examples/data/mask/binary_000120.tif differ
diff --git a/examples/data/mask/binary_000121.tif b/examples/data/mask/binary_000121.tif
index 3c985526..f43e6a76 100644
Binary files a/examples/data/mask/binary_000121.tif and b/examples/data/mask/binary_000121.tif differ
diff --git a/examples/data/mask/binary_000122.tif b/examples/data/mask/binary_000122.tif
index 17b6da0c..9e130ef8 100644
Binary files a/examples/data/mask/binary_000122.tif and b/examples/data/mask/binary_000122.tif differ
diff --git a/examples/data/mask/binary_000123.tif b/examples/data/mask/binary_000123.tif
index 9ba94afe..5b7efaeb 100644
Binary files a/examples/data/mask/binary_000123.tif and b/examples/data/mask/binary_000123.tif differ
diff --git a/examples/data/mask/binary_000124.tif b/examples/data/mask/binary_000124.tif
index 8ca42f2d..2c5a2cfa 100644
Binary files a/examples/data/mask/binary_000124.tif and b/examples/data/mask/binary_000124.tif differ
diff --git a/examples/data/mask/binary_000125.tif b/examples/data/mask/binary_000125.tif
index 7bcfedd9..677c6555 100644
Binary files a/examples/data/mask/binary_000125.tif and b/examples/data/mask/binary_000125.tif differ
diff --git a/examples/data/mask/binary_000126.tif b/examples/data/mask/binary_000126.tif
index 6f95f87f..2c3c3afb 100644
Binary files a/examples/data/mask/binary_000126.tif and b/examples/data/mask/binary_000126.tif differ
diff --git a/examples/data/mask/binary_000127.tif b/examples/data/mask/binary_000127.tif
index c623d5d2..a088704d 100644
Binary files a/examples/data/mask/binary_000127.tif and b/examples/data/mask/binary_000127.tif differ
diff --git a/examples/data/mask/binary_000128.tif b/examples/data/mask/binary_000128.tif
index 723206c7..4e668072 100644
Binary files a/examples/data/mask/binary_000128.tif and b/examples/data/mask/binary_000128.tif differ
diff --git a/examples/data/mask/binary_000129.tif b/examples/data/mask/binary_000129.tif
index c07cd4bd..f22fa76d 100644
Binary files a/examples/data/mask/binary_000129.tif and b/examples/data/mask/binary_000129.tif differ
diff --git a/examples/data/mask/binary_000130.tif b/examples/data/mask/binary_000130.tif
index ea213be7..b0857db1 100644
Binary files a/examples/data/mask/binary_000130.tif and b/examples/data/mask/binary_000130.tif differ
diff --git a/examples/data/mask/binary_000131.tif b/examples/data/mask/binary_000131.tif
index af842a13..2eaf411a 100644
Binary files a/examples/data/mask/binary_000131.tif and b/examples/data/mask/binary_000131.tif differ
diff --git a/examples/data/mask/binary_000132.tif b/examples/data/mask/binary_000132.tif
index 2353b892..7a7926c4 100644
Binary files a/examples/data/mask/binary_000132.tif and b/examples/data/mask/binary_000132.tif differ
diff --git a/examples/data/mask/binary_000133.tif b/examples/data/mask/binary_000133.tif
index e1be4d48..13db140c 100644
Binary files a/examples/data/mask/binary_000133.tif and b/examples/data/mask/binary_000133.tif differ
diff --git a/examples/data/mask/binary_000134.tif b/examples/data/mask/binary_000134.tif
index afcde4b4..378f3ae9 100644
Binary files a/examples/data/mask/binary_000134.tif and b/examples/data/mask/binary_000134.tif differ
diff --git a/examples/data/mask/binary_000135.tif b/examples/data/mask/binary_000135.tif
index 85ae854e..f507e3b3 100644
Binary files a/examples/data/mask/binary_000135.tif and b/examples/data/mask/binary_000135.tif differ
diff --git a/examples/data/mask/binary_000136.tif b/examples/data/mask/binary_000136.tif
index 46db3a3a..7f36d4a3 100644
Binary files a/examples/data/mask/binary_000136.tif and b/examples/data/mask/binary_000136.tif differ
diff --git a/examples/data/mask/binary_000137.tif b/examples/data/mask/binary_000137.tif
index 0bf01923..90367971 100644
Binary files a/examples/data/mask/binary_000137.tif and b/examples/data/mask/binary_000137.tif differ
diff --git a/examples/data/mask/binary_000138.tif b/examples/data/mask/binary_000138.tif
index 6771632f..b033ec19 100644
Binary files a/examples/data/mask/binary_000138.tif and b/examples/data/mask/binary_000138.tif differ
diff --git a/examples/data/mask/binary_000139.tif b/examples/data/mask/binary_000139.tif
index d646425b..f37720de 100644
Binary files a/examples/data/mask/binary_000139.tif and b/examples/data/mask/binary_000139.tif differ
diff --git a/examples/data/mask/binary_000140.tif b/examples/data/mask/binary_000140.tif
index 931f53c4..962f0c66 100644
Binary files a/examples/data/mask/binary_000140.tif and b/examples/data/mask/binary_000140.tif differ
diff --git a/examples/data/mask/binary_000141.tif b/examples/data/mask/binary_000141.tif
index 3ae41a97..66b908fe 100644
Binary files a/examples/data/mask/binary_000141.tif and b/examples/data/mask/binary_000141.tif differ
diff --git a/examples/data/mask/binary_000142.tif b/examples/data/mask/binary_000142.tif
index 6e66bdd9..c28315d4 100644
Binary files a/examples/data/mask/binary_000142.tif and b/examples/data/mask/binary_000142.tif differ
diff --git a/examples/data/mask/binary_000143.tif b/examples/data/mask/binary_000143.tif
index cd0fbade..f06de7a1 100644
Binary files a/examples/data/mask/binary_000143.tif and b/examples/data/mask/binary_000143.tif differ
diff --git a/examples/data/mask/binary_000144.tif b/examples/data/mask/binary_000144.tif
index 5040c7e8..052dd306 100644
Binary files a/examples/data/mask/binary_000144.tif and b/examples/data/mask/binary_000144.tif differ
diff --git a/examples/data/mask/binary_000145.tif b/examples/data/mask/binary_000145.tif
index 465eb6eb..c789f0d9 100644
Binary files a/examples/data/mask/binary_000145.tif and b/examples/data/mask/binary_000145.tif differ
diff --git a/examples/data/mask/binary_000146.tif b/examples/data/mask/binary_000146.tif
index dd388bcc..8e777158 100644
Binary files a/examples/data/mask/binary_000146.tif and b/examples/data/mask/binary_000146.tif differ
diff --git a/examples/data/mask/binary_000147.tif b/examples/data/mask/binary_000147.tif
index 7c39462d..8ce2ca81 100644
Binary files a/examples/data/mask/binary_000147.tif and b/examples/data/mask/binary_000147.tif differ
diff --git a/examples/data/mask/binary_000148.tif b/examples/data/mask/binary_000148.tif
index 185e7b19..dbd68c8f 100644
Binary files a/examples/data/mask/binary_000148.tif and b/examples/data/mask/binary_000148.tif differ
diff --git a/examples/data/mask/binary_000149.tif b/examples/data/mask/binary_000149.tif
index 366dd1b5..184cdfaf 100644
Binary files a/examples/data/mask/binary_000149.tif and b/examples/data/mask/binary_000149.tif differ
diff --git a/examples/data/mask/binary_000150.tif b/examples/data/mask/binary_000150.tif
index 2c39fdb5..eb8086c3 100644
Binary files a/examples/data/mask/binary_000150.tif and b/examples/data/mask/binary_000150.tif differ
diff --git a/examples/data/mask/binary_000151.tif b/examples/data/mask/binary_000151.tif
index ede31708..b4837ceb 100644
Binary files a/examples/data/mask/binary_000151.tif and b/examples/data/mask/binary_000151.tif differ
diff --git a/examples/data/mask/binary_000152.tif b/examples/data/mask/binary_000152.tif
index 6677f0e1..603c2d44 100644
Binary files a/examples/data/mask/binary_000152.tif and b/examples/data/mask/binary_000152.tif differ
diff --git a/examples/data/mask/binary_000153.tif b/examples/data/mask/binary_000153.tif
index 63890af7..2bbe0462 100644
Binary files a/examples/data/mask/binary_000153.tif and b/examples/data/mask/binary_000153.tif differ
diff --git a/examples/data/mask/binary_000154.tif b/examples/data/mask/binary_000154.tif
index b4305c04..daf2e37c 100644
Binary files a/examples/data/mask/binary_000154.tif and b/examples/data/mask/binary_000154.tif differ
diff --git a/examples/data/mask/binary_000155.tif b/examples/data/mask/binary_000155.tif
index 0d14abce..9351c03b 100644
Binary files a/examples/data/mask/binary_000155.tif and b/examples/data/mask/binary_000155.tif differ
diff --git a/examples/data/mask/binary_000156.tif b/examples/data/mask/binary_000156.tif
index 8744bf00..3aae6972 100644
Binary files a/examples/data/mask/binary_000156.tif and b/examples/data/mask/binary_000156.tif differ
diff --git a/examples/data/mask/binary_000157.tif b/examples/data/mask/binary_000157.tif
index f6d5704b..a8737d85 100644
Binary files a/examples/data/mask/binary_000157.tif and b/examples/data/mask/binary_000157.tif differ
diff --git a/examples/data/mask/binary_000158.tif b/examples/data/mask/binary_000158.tif
index 4e61ae3f..2b7455e4 100644
Binary files a/examples/data/mask/binary_000158.tif and b/examples/data/mask/binary_000158.tif differ
diff --git a/examples/data/mask/binary_000159.tif b/examples/data/mask/binary_000159.tif
index dfef39e1..7746a152 100644
Binary files a/examples/data/mask/binary_000159.tif and b/examples/data/mask/binary_000159.tif differ
diff --git a/examples/data/mask/binary_000160.tif b/examples/data/mask/binary_000160.tif
index 4ca6eebf..caade514 100644
Binary files a/examples/data/mask/binary_000160.tif and b/examples/data/mask/binary_000160.tif differ
diff --git a/examples/data/mask/binary_000161.tif b/examples/data/mask/binary_000161.tif
index 93a1c416..cd11a397 100644
Binary files a/examples/data/mask/binary_000161.tif and b/examples/data/mask/binary_000161.tif differ
diff --git a/examples/data/mask/binary_000162.tif b/examples/data/mask/binary_000162.tif
index 7cc2bc3a..518a9e5d 100644
Binary files a/examples/data/mask/binary_000162.tif and b/examples/data/mask/binary_000162.tif differ
diff --git a/examples/data/mask/binary_000163.tif b/examples/data/mask/binary_000163.tif
index a5c0f10c..07a48a26 100644
Binary files a/examples/data/mask/binary_000163.tif and b/examples/data/mask/binary_000163.tif differ
diff --git a/examples/data/mask/binary_000164.tif b/examples/data/mask/binary_000164.tif
index 28fd60ad..dc70bf53 100644
Binary files a/examples/data/mask/binary_000164.tif and b/examples/data/mask/binary_000164.tif differ
diff --git a/examples/data/mask/binary_000165.tif b/examples/data/mask/binary_000165.tif
index 163196f6..f2c7210c 100644
Binary files a/examples/data/mask/binary_000165.tif and b/examples/data/mask/binary_000165.tif differ
diff --git a/examples/data/mask/binary_000166.tif b/examples/data/mask/binary_000166.tif
index 98da936a..64cc8fd7 100644
Binary files a/examples/data/mask/binary_000166.tif and b/examples/data/mask/binary_000166.tif differ
diff --git a/examples/data/mask/binary_000167.tif b/examples/data/mask/binary_000167.tif
index 309a7d64..db7ef2bf 100644
Binary files a/examples/data/mask/binary_000167.tif and b/examples/data/mask/binary_000167.tif differ
diff --git a/examples/data/mask/binary_000168.tif b/examples/data/mask/binary_000168.tif
index 31814b30..a078d9fe 100644
Binary files a/examples/data/mask/binary_000168.tif and b/examples/data/mask/binary_000168.tif differ
diff --git a/examples/data/mask/binary_000169.tif b/examples/data/mask/binary_000169.tif
index 95d0af64..e1f35eed 100644
Binary files a/examples/data/mask/binary_000169.tif and b/examples/data/mask/binary_000169.tif differ
diff --git a/examples/data/mask/binary_000170.tif b/examples/data/mask/binary_000170.tif
index 5fb3f4ea..d9395fa9 100644
Binary files a/examples/data/mask/binary_000170.tif and b/examples/data/mask/binary_000170.tif differ
diff --git a/examples/data/mask/binary_000171.tif b/examples/data/mask/binary_000171.tif
index 5ae9d9c3..1d3c2849 100644
Binary files a/examples/data/mask/binary_000171.tif and b/examples/data/mask/binary_000171.tif differ
diff --git a/examples/data/mask/binary_000172.tif b/examples/data/mask/binary_000172.tif
index 2862b8ac..66bb4b72 100644
Binary files a/examples/data/mask/binary_000172.tif and b/examples/data/mask/binary_000172.tif differ
diff --git a/examples/data/mask/binary_000173.tif b/examples/data/mask/binary_000173.tif
index cfba0c93..3d9a0ed8 100644
Binary files a/examples/data/mask/binary_000173.tif and b/examples/data/mask/binary_000173.tif differ
diff --git a/examples/data/mask/binary_000174.tif b/examples/data/mask/binary_000174.tif
index 691ac5ba..60911b8e 100644
Binary files a/examples/data/mask/binary_000174.tif and b/examples/data/mask/binary_000174.tif differ
diff --git a/examples/data/mask/binary_000175.tif b/examples/data/mask/binary_000175.tif
index 9c976ef9..ccb3084f 100644
Binary files a/examples/data/mask/binary_000175.tif and b/examples/data/mask/binary_000175.tif differ
diff --git a/examples/data/mask/binary_000176.tif b/examples/data/mask/binary_000176.tif
index 768ae7eb..68dac57c 100644
Binary files a/examples/data/mask/binary_000176.tif and b/examples/data/mask/binary_000176.tif differ
diff --git a/examples/data/mask/binary_000177.tif b/examples/data/mask/binary_000177.tif
index 18f1ede5..3a780e92 100644
Binary files a/examples/data/mask/binary_000177.tif and b/examples/data/mask/binary_000177.tif differ
diff --git a/examples/data/mask/binary_000178.tif b/examples/data/mask/binary_000178.tif
index b92533d4..9818ae4f 100644
Binary files a/examples/data/mask/binary_000178.tif and b/examples/data/mask/binary_000178.tif differ
diff --git a/examples/data/mask/binary_000179.tif b/examples/data/mask/binary_000179.tif
index 9f023937..f757f2ea 100644
Binary files a/examples/data/mask/binary_000179.tif and b/examples/data/mask/binary_000179.tif differ
diff --git a/examples/data/mask/binary_000180.tif b/examples/data/mask/binary_000180.tif
index b0c6b3a8..9de69896 100644
Binary files a/examples/data/mask/binary_000180.tif and b/examples/data/mask/binary_000180.tif differ
diff --git a/examples/data/mask/binary_000181.tif b/examples/data/mask/binary_000181.tif
index 725c8da8..6beac023 100644
Binary files a/examples/data/mask/binary_000181.tif and b/examples/data/mask/binary_000181.tif differ
diff --git a/examples/data/mask/binary_000182.tif b/examples/data/mask/binary_000182.tif
index 5d7f81d1..05973238 100644
Binary files a/examples/data/mask/binary_000182.tif and b/examples/data/mask/binary_000182.tif differ
diff --git a/examples/data/mask/binary_000183.tif b/examples/data/mask/binary_000183.tif
index 177bc7b9..67e3861b 100644
Binary files a/examples/data/mask/binary_000183.tif and b/examples/data/mask/binary_000183.tif differ
diff --git a/examples/data/mask/binary_000184.tif b/examples/data/mask/binary_000184.tif
index d1bca9f6..4ea06449 100644
Binary files a/examples/data/mask/binary_000184.tif and b/examples/data/mask/binary_000184.tif differ
diff --git a/examples/data/mask/binary_000185.tif b/examples/data/mask/binary_000185.tif
index 413f189a..13aefdce 100644
Binary files a/examples/data/mask/binary_000185.tif and b/examples/data/mask/binary_000185.tif differ
diff --git a/examples/data/mask/binary_000186.tif b/examples/data/mask/binary_000186.tif
index ee16d22d..f3df65a0 100644
Binary files a/examples/data/mask/binary_000186.tif and b/examples/data/mask/binary_000186.tif differ
diff --git a/examples/data/mask/binary_000187.tif b/examples/data/mask/binary_000187.tif
index dcf2dba1..b2b9be63 100644
Binary files a/examples/data/mask/binary_000187.tif and b/examples/data/mask/binary_000187.tif differ
diff --git a/examples/data/mask/binary_000188.tif b/examples/data/mask/binary_000188.tif
index 6a04a211..02cf7e2d 100644
Binary files a/examples/data/mask/binary_000188.tif and b/examples/data/mask/binary_000188.tif differ
diff --git a/examples/data/mask/binary_000189.tif b/examples/data/mask/binary_000189.tif
index a081c6d3..40234f12 100644
Binary files a/examples/data/mask/binary_000189.tif and b/examples/data/mask/binary_000189.tif differ
diff --git a/examples/data/mask/binary_000190.tif b/examples/data/mask/binary_000190.tif
index 76423b40..63180ab0 100644
Binary files a/examples/data/mask/binary_000190.tif and b/examples/data/mask/binary_000190.tif differ
diff --git a/examples/data/mask/binary_000191.tif b/examples/data/mask/binary_000191.tif
index 387ba746..19fded93 100644
Binary files a/examples/data/mask/binary_000191.tif and b/examples/data/mask/binary_000191.tif differ
diff --git a/examples/data/mask/binary_000192.tif b/examples/data/mask/binary_000192.tif
index abf575f6..c5cb9431 100644
Binary files a/examples/data/mask/binary_000192.tif and b/examples/data/mask/binary_000192.tif differ
diff --git a/examples/data/mask/binary_000193.tif b/examples/data/mask/binary_000193.tif
index 6c20ed3a..02cb1a28 100644
Binary files a/examples/data/mask/binary_000193.tif and b/examples/data/mask/binary_000193.tif differ
diff --git a/examples/data/mask/binary_000194.tif b/examples/data/mask/binary_000194.tif
index 1f06ed41..ed840b4f 100644
Binary files a/examples/data/mask/binary_000194.tif and b/examples/data/mask/binary_000194.tif differ
diff --git a/examples/data/mask/binary_000195.tif b/examples/data/mask/binary_000195.tif
index ef3c8064..064e73b2 100644
Binary files a/examples/data/mask/binary_000195.tif and b/examples/data/mask/binary_000195.tif differ
diff --git a/examples/data/mask/binary_000196.tif b/examples/data/mask/binary_000196.tif
index d5a86c95..676bf78a 100644
Binary files a/examples/data/mask/binary_000196.tif and b/examples/data/mask/binary_000196.tif differ
diff --git a/examples/data/mask/binary_000197.tif b/examples/data/mask/binary_000197.tif
index 76430f1f..8cfe5635 100644
Binary files a/examples/data/mask/binary_000197.tif and b/examples/data/mask/binary_000197.tif differ
diff --git a/examples/data/mask/binary_000198.tif b/examples/data/mask/binary_000198.tif
index 0c963492..33553fac 100644
Binary files a/examples/data/mask/binary_000198.tif and b/examples/data/mask/binary_000198.tif differ
diff --git a/examples/data/mask/binary_000199.tif b/examples/data/mask/binary_000199.tif
index 7b7a584f..c8a04077 100644
Binary files a/examples/data/mask/binary_000199.tif and b/examples/data/mask/binary_000199.tif differ
diff --git a/examples/data/mask/binary_000200.tif b/examples/data/mask/binary_000200.tif
index e725bafa..68fbf932 100644
Binary files a/examples/data/mask/binary_000200.tif and b/examples/data/mask/binary_000200.tif differ
diff --git a/examples/data/mask/binary_000201.tif b/examples/data/mask/binary_000201.tif
index 4884048a..fb001762 100644
Binary files a/examples/data/mask/binary_000201.tif and b/examples/data/mask/binary_000201.tif differ
diff --git a/examples/data/mask/binary_000202.tif b/examples/data/mask/binary_000202.tif
index 3023a0c3..7ed33457 100644
Binary files a/examples/data/mask/binary_000202.tif and b/examples/data/mask/binary_000202.tif differ
diff --git a/examples/data/mask/binary_000203.tif b/examples/data/mask/binary_000203.tif
index f59bf722..ea68142c 100644
Binary files a/examples/data/mask/binary_000203.tif and b/examples/data/mask/binary_000203.tif differ
diff --git a/examples/data/mask/binary_000204.tif b/examples/data/mask/binary_000204.tif
index 3181329a..1a1e3114 100644
Binary files a/examples/data/mask/binary_000204.tif and b/examples/data/mask/binary_000204.tif differ
diff --git a/examples/data/mask/binary_000205.tif b/examples/data/mask/binary_000205.tif
index 2871e8f0..8d2967bf 100644
Binary files a/examples/data/mask/binary_000205.tif and b/examples/data/mask/binary_000205.tif differ
diff --git a/examples/data/mask/binary_000206.tif b/examples/data/mask/binary_000206.tif
index 36c5c8d4..1d31f79a 100644
Binary files a/examples/data/mask/binary_000206.tif and b/examples/data/mask/binary_000206.tif differ
diff --git a/examples/data/mask/binary_000207.tif b/examples/data/mask/binary_000207.tif
index 440c393a..45e11bc4 100644
Binary files a/examples/data/mask/binary_000207.tif and b/examples/data/mask/binary_000207.tif differ
diff --git a/examples/data/mask/binary_000208.tif b/examples/data/mask/binary_000208.tif
index a9dcb993..d3f484f8 100644
Binary files a/examples/data/mask/binary_000208.tif and b/examples/data/mask/binary_000208.tif differ
diff --git a/examples/data/mask/binary_000209.tif b/examples/data/mask/binary_000209.tif
index 54f9d12d..c4304d91 100644
Binary files a/examples/data/mask/binary_000209.tif and b/examples/data/mask/binary_000209.tif differ
diff --git a/examples/data/mask/binary_000210.tif b/examples/data/mask/binary_000210.tif
index c460b198..ddea2dac 100644
Binary files a/examples/data/mask/binary_000210.tif and b/examples/data/mask/binary_000210.tif differ
diff --git a/examples/data/mask/binary_000211.tif b/examples/data/mask/binary_000211.tif
index 17422c6a..b20ecb50 100644
Binary files a/examples/data/mask/binary_000211.tif and b/examples/data/mask/binary_000211.tif differ
diff --git a/examples/data/mask/binary_000212.tif b/examples/data/mask/binary_000212.tif
index d5f76a77..7bed9e7f 100644
Binary files a/examples/data/mask/binary_000212.tif and b/examples/data/mask/binary_000212.tif differ
diff --git a/examples/data/mask/binary_000213.tif b/examples/data/mask/binary_000213.tif
index bb272169..e86d3d25 100644
Binary files a/examples/data/mask/binary_000213.tif and b/examples/data/mask/binary_000213.tif differ
diff --git a/examples/data/mask/binary_000214.tif b/examples/data/mask/binary_000214.tif
index c71dd769..0508f059 100644
Binary files a/examples/data/mask/binary_000214.tif and b/examples/data/mask/binary_000214.tif differ
diff --git a/examples/data/mask/binary_000215.tif b/examples/data/mask/binary_000215.tif
index dcf07ac2..7742d356 100644
Binary files a/examples/data/mask/binary_000215.tif and b/examples/data/mask/binary_000215.tif differ
diff --git a/examples/data/mask/binary_000216.tif b/examples/data/mask/binary_000216.tif
index e65471ab..dfbf4823 100644
Binary files a/examples/data/mask/binary_000216.tif and b/examples/data/mask/binary_000216.tif differ
diff --git a/examples/data/mask/binary_000217.tif b/examples/data/mask/binary_000217.tif
index 9d56c43f..0a7e48c5 100644
Binary files a/examples/data/mask/binary_000217.tif and b/examples/data/mask/binary_000217.tif differ
diff --git a/examples/data/mask/binary_000218.tif b/examples/data/mask/binary_000218.tif
index 808c9bbc..bc034afa 100644
Binary files a/examples/data/mask/binary_000218.tif and b/examples/data/mask/binary_000218.tif differ
diff --git a/examples/data/mask/binary_000219.tif b/examples/data/mask/binary_000219.tif
index 73c5c56f..a1d15187 100644
Binary files a/examples/data/mask/binary_000219.tif and b/examples/data/mask/binary_000219.tif differ
diff --git a/examples/data/mask/binary_000220.tif b/examples/data/mask/binary_000220.tif
index e31141e2..776d393d 100644
Binary files a/examples/data/mask/binary_000220.tif and b/examples/data/mask/binary_000220.tif differ
diff --git a/examples/data/mask/binary_000221.tif b/examples/data/mask/binary_000221.tif
index 0012d2a4..2140174f 100644
Binary files a/examples/data/mask/binary_000221.tif and b/examples/data/mask/binary_000221.tif differ
diff --git a/examples/data/mask/binary_000222.tif b/examples/data/mask/binary_000222.tif
index 9e3c6f4d..50330b13 100644
Binary files a/examples/data/mask/binary_000222.tif and b/examples/data/mask/binary_000222.tif differ
diff --git a/examples/data/mask/binary_000223.tif b/examples/data/mask/binary_000223.tif
index 595038ab..7bb3ef7e 100644
Binary files a/examples/data/mask/binary_000223.tif and b/examples/data/mask/binary_000223.tif differ
diff --git a/examples/data/mask/binary_000224.tif b/examples/data/mask/binary_000224.tif
index ac4a2711..82b03939 100644
Binary files a/examples/data/mask/binary_000224.tif and b/examples/data/mask/binary_000224.tif differ
diff --git a/examples/data/mask/binary_000225.tif b/examples/data/mask/binary_000225.tif
index 7373f215..d9712906 100644
Binary files a/examples/data/mask/binary_000225.tif and b/examples/data/mask/binary_000225.tif differ
diff --git a/examples/data/mask/binary_000226.tif b/examples/data/mask/binary_000226.tif
index 7373f215..c8ba88d2 100644
Binary files a/examples/data/mask/binary_000226.tif and b/examples/data/mask/binary_000226.tif differ
diff --git a/examples/data/mask/binary_000227.tif b/examples/data/mask/binary_000227.tif
index 7373f215..eb31ab4c 100644
Binary files a/examples/data/mask/binary_000227.tif and b/examples/data/mask/binary_000227.tif differ
diff --git a/examples/data/mask/binary_000228.tif b/examples/data/mask/binary_000228.tif
index 7373f215..e6fd7987 100644
Binary files a/examples/data/mask/binary_000228.tif and b/examples/data/mask/binary_000228.tif differ
diff --git a/examples/data/mask/binary_000229.tif b/examples/data/mask/binary_000229.tif
index 7373f215..85c8d598 100644
Binary files a/examples/data/mask/binary_000229.tif and b/examples/data/mask/binary_000229.tif differ
diff --git a/examples/data/mask/binary_000230.tif b/examples/data/mask/binary_000230.tif
index 7373f215..01b63261 100644
Binary files a/examples/data/mask/binary_000230.tif and b/examples/data/mask/binary_000230.tif differ
diff --git a/examples/data/mask/binary_000231.tif b/examples/data/mask/binary_000231.tif
index 7373f215..ecb1e006 100644
Binary files a/examples/data/mask/binary_000231.tif and b/examples/data/mask/binary_000231.tif differ
diff --git a/examples/data/mask/binary_000232.tif b/examples/data/mask/binary_000232.tif
index 7373f215..65a31ad9 100644
Binary files a/examples/data/mask/binary_000232.tif and b/examples/data/mask/binary_000232.tif differ
diff --git a/examples/data/mask/binary_000233.tif b/examples/data/mask/binary_000233.tif
index 7373f215..9df289a2 100644
Binary files a/examples/data/mask/binary_000233.tif and b/examples/data/mask/binary_000233.tif differ
diff --git a/examples/data/mask/binary_000234.tif b/examples/data/mask/binary_000234.tif
index 7373f215..d65f52e0 100644
Binary files a/examples/data/mask/binary_000234.tif and b/examples/data/mask/binary_000234.tif differ
diff --git a/mkdocs.yml b/mkdocs.yml
index a40af231..af126906 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -34,6 +34,7 @@ nav:
- advanced/index.md
- Transmural Analysis: advanced/cardio-analysis.md
- Streamlines: advanced/streamlines.md
+ - SLURM Launcher: advanced/slurm-launcher.md
- Reference:
- reference/index.md
- CLI Commands: reference/cli.md
diff --git a/paper/paper.md b/paper/paper.md
index 7785be4a..1a4290ad 100644
--- a/paper/paper.md
+++ b/paper/paper.md
@@ -59,7 +59,7 @@ For non-diffusion imaging modalities, such as micro-CT [@reichardt_fiber_2020],
Cardiotensor addresses this gap by providing an open-source Python package specifically tailored to structure tensor analysis of large cardiac volumes. Rather than relying on diffusion modeling, cardiotensor infers tissue orientation directly from image intensity gradients, making it applicable across a wide range of modalities and scales. Previous studies have demonstrated strong agreement between structure tensor–based orientation and DT-MRI–derived metrics when applied to the same human hearts [@teh_validation_2016]. The package supports full pipelines from raw image stacks to myocyte orientation maps and tractography. Its architecture is optimized for large datasets, using chunked and parallel processing suitable for high-performance computing environments. The overall processing workflow, from input volumes to orientation maps and tractography, is summarized in \autoref{fig:pipeline}.
-Cardiotensor has already been successfully applied in published work to characterize 3D cardiomyocyte architecture in healthy and diseased human hearts using synchrotron tomography [@brunet_multidimensional_2024] to datasets over a terabyte in size. While cardiotensor was conceived for cardiac imaging, the package is modality‑ and tissue‑agnostic. Any volumetric dataset exhibiting coherent fibrous microstructure can be analyzed, including brain white matter, skeletal muscle, and tendon. This generality makes the library useful for both cardiovascular and broader anatomical or histological studies.
+Cardiotensor has already been successfully applied in published work to characterize 3D cardiomyocyte architecture in healthy and diseased human hearts using synchrotron tomography [@brunet_multidimensional_2024]. In practice, cardiotensor has been applied to whole-heart HiP-CT datasets exceeding 1–5 TB (teravoxel scale). While cardiotensor was conceived for cardiac imaging, the package is modality‑ and tissue‑agnostic. Any volumetric dataset exhibiting coherent fibrous microstructure can be analyzed, including brain white matter, skeletal muscle, and tendon. This generality makes the library useful for both cardiovascular and broader anatomical or histological studies.
![Cardiotensor pipeline for 3D cardiac orientation analysis and tractography.
(a) Input whole‑ or partial‑heart volume with optional myocardial mask.
@@ -70,7 +70,7 @@ The third eigenvector field (smallest eigenvalue) is visualized as arrows color
## Implementation
-Cardiotensor is implemented in Python and designed to efficiently process very large 3D cardiac imaging datasets. It relies primarily on NumPy [@van_der_walt_numpy_2011] for numerical computation, with I/O accelerated by tifffile [@gohlke_cgohlketifffile_2025], Glymur [@evans_quintusdiasglymur_2025], and OpenCV [@bradski_opencv_2000]. Dask [@rocklin_dask_2015] is used exclusively to parallelize file reading, while the core computations rely on Python’s multiprocessing module for local parallelism. The package builds on the structure-tensor library [@jeppesen_quantifying_2021] to calculate the 3D structure tensor and eigenvector decomposition.
+Cardiotensor is implemented in Python and designed to efficiently process terabyte-scale 3D cardiac imaging datasets. It relies primarily on NumPy [@van_der_walt_numpy_2011] for numerical computation, with I/O accelerated by tifffile [@gohlke_cgohlketifffile_2025], Glymur [@evans_quintusdiasglymur_2025], and OpenCV [@bradski_opencv_2000]. Dask [@rocklin_dask_2015] is used exclusively to parallelize file reading, while the core computations rely on Python’s multiprocessing module for local parallelism. The package builds on the structure-tensor library [@jeppesen_quantifying_2021] to calculate the 3D structure tensor and eigenvector decomposition.
The package supports multiple use cases:
diff --git a/paper/paper.pdf b/paper/paper.pdf
index d086ddc6..26750920 100644
Binary files a/paper/paper.pdf and b/paper/paper.pdf differ
diff --git a/src/cardiotensor/launcher/slurm_launcher.py b/src/cardiotensor/launcher/slurm_launcher.py
index 75a5a076..43e48472 100644
--- a/src/cardiotensor/launcher/slurm_launcher.py
+++ b/src/cardiotensor/launcher/slurm_launcher.py
@@ -1,293 +1,467 @@
import glob
-import inspect
import math
import os
+import re
+import shlex
import subprocess
import sys
import time
from datetime import datetime
+from pathlib import Path
-from cardiotensor.orientation.orientation_computation_pipeline import (
- compute_orientation,
-)
from cardiotensor.utils.DataReader import DataReader
-from cardiotensor.utils.utils import (
- read_conf_file,
-)
+from cardiotensor.utils.utils import read_conf_file
def submit_job_to_slurm(
- executable_path: str,
conf_file_path: str,
- start_image: int,
- end_image: int,
- N_chunk: int = 10,
- mem_needed: int = 64,
-) -> int:
+ start_index: int,
+ end_index_exclusive: int,
+ chunk_size: int,
+ *,
+ partition: str | None,
+ time_limit: str,
+ cpus_per_task: int,
+ mem_gb: int,
+ array_parallel: int,
+ log_dir: str,
+ submit_dir: str,
+ dry_run: bool = False,
+) -> int | None:
"""
- Submit a Slurm job and return its job ID.
-
- Args:
- executable_path (str): Path to the executable script.
- conf_file_path (str): Path to the configuration file.
- start_image (int): Index of the first image to process.
- end_image (int): Index of the last image to process.
- N_chunk (int, optional): Number of chunks for the job. Default is 10.
- mem_needed (int, optional): Memory required in GB. Default is 64.
-
- Returns:
- int: The Slurm job ID.
+ Submit a SLURM array job for a contiguous index window [start_index, end_index_exclusive).
"""
- log_dir = "/tmp_14_days/bm18/slurm/log/"
- submit_dir = "/tmp_14_days/bm18/slurm/submit"
-
- executable_path = executable_path.split(".py")[0]
- executable = os.path.basename(executable_path)
- print(f"Script to start: {executable}", flush=True)
-
- # Get the current date in YYYY-MM-DD format
- current_date = datetime.now().strftime("%Y-%m-%d")
-
- job_name = f"{executable}_{current_date}"
- # Generate the job filename
- job_filename = f"{submit_dir}/{job_name}.slurm"
+ total_images = end_index_exclusive - start_index
+ if total_images <= 0:
+ raise ValueError("end_index_exclusive must be greater than start_index.")
+ if chunk_size <= 0:
+ raise ValueError("chunk_size must be > 0")
+
+ n_jobs = math.ceil(total_images / chunk_size)
+ if n_jobs <= 0:
+ raise ValueError("No jobs to submit.")
+
+ log_dir_path = Path(log_dir).resolve()
+ submit_dir_path = Path(submit_dir).resolve()
+ log_dir_path.mkdir(parents=True, exist_ok=True)
+ submit_dir_path.mkdir(parents=True, exist_ok=True)
+
+ ts = datetime.now().strftime("%Y%m%d_%H%M%S")
+ job_name = f"cardiotensor_{ts}_{start_index:06d}_{end_index_exclusive - 1:06d}"
+ job_filename = submit_dir_path / f"{job_name}.slurm"
+ conf_file_abs = str(Path(conf_file_path).resolve())
+ conf_file_quoted = shlex.quote(conf_file_abs)
- # Calculate the total number of images to process
- total_images = end_image - start_image + 1
- IMAGES_PER_JOB = N_chunk
- N_jobs = math.ceil(total_images / IMAGES_PER_JOB)
+ print(
+ f"Preparing SLURM array: n_jobs={n_jobs}, chunk_size={chunk_size}, "
+ f"window=[{start_index}, {end_index_exclusive})",
+ flush=True,
+ )
- print(f"\nN_jobs = {N_jobs}, IMAGES_PER_JOB = {IMAGES_PER_JOB}", flush=True)
+ partition_line = (
+ f"#SBATCH --partition={partition}\n"
+ if partition is not None and partition.strip() != ""
+ else ""
+ )
slurm_script_content = f"""#!/bin/bash -l
-#SBATCH --output={log_dir}/slurm-%x-%A_%a.out
-#SBATCH --partition=low
-#SBATCH --nodes=1
+#SBATCH --output={log_dir_path}/slurm-%x-%A_%a.out
+{partition_line}#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
-#SBATCH --cpus-per-task=16
-#SBATCH --mem={math.ceil(mem_needed)}G
+#SBATCH --cpus-per-task={cpus_per_task}
+#SBATCH --mem={mem_gb}G
#SBATCH --job-name={job_name}
-#SBATCH --time=2:00:00
-#SBATCH --array=1-{N_jobs}%50
+#SBATCH --time={time_limit}
+#SBATCH --array=0-{n_jobs - 1}%{array_parallel}
+
+set -euo pipefail
echo ------------------------------------------------------
-echo SLURM_NNODES: $SLURM_NNODES
-echo SLURM_JOB_NODELIST: $SLURM_JOB_NODELIST
-echo SLURM_SUBMIT_DIR: $SLURM_SUBMIT_DIR
-echo SLURM_SUBMIT_HOST: $SLURM_SUBMIT_HOST
-echo SLURM_JOB_ID: $SLURM_JOB_ID
-echo SLURM_JOB_NAME: $SLURM_JOB_NAME
-echo SLURM_JOB_PARTITION: $SLURM_JOB_PARTITION
-echo SLURM_NTASKS: $SLURM_NTASKS
-echo SLURM_CPUS-PER-TASK: $SLURM_CPUS_PER_TASK
-echo SLURM_TASKS_PER_NODE: $SLURM_TASKS_PER_NODE
-echo SLURM_NTASKS_PER_NODE: $SLURM_NTASKS_PER_NODE
-echo SLURM_MEM_PER_CPU: $SLURM_MEM_PER_CPU
-echo SLURM_MEM_PER_NODE: $SLURM_MEM_PER_NODE
+echo SLURM_NNODES: ${{SLURM_NNODES:-}}
+echo SLURM_JOB_NODELIST: ${{SLURM_JOB_NODELIST:-}}
+echo SLURM_SUBMIT_DIR: ${{SLURM_SUBMIT_DIR:-}}
+echo SLURM_SUBMIT_HOST: ${{SLURM_SUBMIT_HOST:-}}
+echo SLURM_JOB_ID: ${{SLURM_JOB_ID:-}}
+echo SLURM_JOB_NAME: ${{SLURM_JOB_NAME:-}}
+echo SLURM_JOB_PARTITION: ${{SLURM_JOB_PARTITION:-}}
+echo SLURM_NTASKS: ${{SLURM_NTASKS:-}}
+echo SLURM_CPUS_PER_TASK: ${{SLURM_CPUS_PER_TASK:-}}
+echo SLURM_TASKS_PER_NODE: ${{SLURM_TASKS_PER_NODE:-}}
+echo SLURM_NTASKS_PER_NODE: ${{SLURM_NTASKS_PER_NODE:-}}
+echo SLURM_MEM_PER_CPU: ${{SLURM_MEM_PER_CPU:-}}
+echo SLURM_MEM_PER_NODE: ${{SLURM_MEM_PER_NODE:-}}
echo ------------------------------------------------------
+IMAGES_PER_JOB={chunk_size}
+START_INDEX_BASE={start_index}
+END_INDEX_EXCLUSIVE={end_index_exclusive}
-IMAGES_PER_JOB={IMAGES_PER_JOB}
-START_IMAGE={start_image}
-TOTAL_IMAGES={total_images + start_image}
+START_INDEX=$(( SLURM_ARRAY_TASK_ID * IMAGES_PER_JOB + START_INDEX_BASE ))
+END_INDEX=$(( START_INDEX + IMAGES_PER_JOB ))
-START_INDEX=$(( (SLURM_ARRAY_TASK_ID - 1) * $IMAGES_PER_JOB + $START_IMAGE ))
-END_INDEX=$(( SLURM_ARRAY_TASK_ID * $IMAGES_PER_JOB + $START_IMAGE ))
+if [ "$START_INDEX" -ge "$END_INDEX_EXCLUSIVE" ]; then
+ echo "Task index out of range for requested window. Skipping."
+ exit 0
+fi
-# Cap END_INDEX to the last image index (zero-based)
-if [ $END_INDEX -ge $TOTAL_IMAGES ]; then END_INDEX=$(( $TOTAL_IMAGES + $START_IMAGE - 1 )); fi
+if [ "$END_INDEX" -gt "$END_INDEX_EXCLUSIVE" ]; then
+ END_INDEX=$END_INDEX_EXCLUSIVE
+fi
-echo Start index, End index : $START_INDEX: $END_INDEX
-echo mem used {math.ceil(mem_needed)}G
+echo "Start index (inclusive): $START_INDEX"
+echo "End index (exclusive): $END_INDEX"
+echo "Requested memory (GB): {mem_gb}"
# Fix Qt headless error
export QT_QPA_PLATFORM=offscreen
-# Starting python script
-echo cardio-tensor {conf_file_path} --start_index $START_INDEX --end_index $END_INDEX
-
-# cardio-tensor {executable_path}.py {conf_file_path} --start_index $START_INDEX --end_index $END_INDEX
-cardio-tensor {conf_file_path} --start_index $START_INDEX --end_index $END_INDEX
-
+echo cardio-tensor {conf_file_quoted} --start_index "$START_INDEX" --end_index "$END_INDEX"
+cardio-tensor {conf_file_quoted} --start_index "$START_INDEX" --end_index "$END_INDEX"
"""
- with open(job_filename, "w") as file:
- file.write(slurm_script_content)
+ job_filename.write_text(slurm_script_content)
+
+ if dry_run:
+ print(f"[dry-run] Generated script: {job_filename}", flush=True)
+ print(f"[dry-run] sbatch {job_filename}", flush=True)
+ return None
try:
result = subprocess.run(
- ["sbatch", job_filename], capture_output=True, text=True, check=True
+ ["sbatch", str(job_filename)],
+ capture_output=True,
+ text=True,
+ check=True,
)
- job_id = result.stdout.split()[-1]
- print(f"sbatch {job_id} - Index {start_image} to {end_image}", flush=True)
- return int(job_id)
- except subprocess.CalledProcessError:
- print(f"⚠️ - Failed to submit Slurm job with script {job_filename}", flush=True)
- sys.exit()
+ except subprocess.CalledProcessError as exc:
+ print(f"⚠️ Failed to submit SLURM script {job_filename}", flush=True)
+ if exc.stdout:
+ print(exc.stdout, flush=True)
+ if exc.stderr:
+ print(exc.stderr, flush=True)
+ sys.exit(1)
+
+ stdout = result.stdout.strip()
+ match = re.search(r"Submitted batch job\s+(\d+)", stdout)
+ if match is None:
+ numbers = re.findall(r"\d+", stdout)
+ if not numbers:
+ raise RuntimeError(f"Could not parse SLURM job id from: {stdout}")
+ job_id = int(numbers[-1])
+ else:
+ job_id = int(match.group(1))
+
+ print(f"Submitted sbatch job {job_id} for [{start_index}, {end_index_exclusive})")
+ return job_id
def slurm_launcher(
- conf_file_path: str, start_index: int = 0, end_index: int | None = None
+ conf_file_path: str,
+ start_index: int = 0,
+ end_index: int | None = None,
+ chunk_size: int | None = None,
+ partition: str | None = None,
+ time_limit: str | None = None,
+ cpus_per_task: int | None = None,
+ mem_gb: int | None = None,
+ array_parallel: int | None = None,
+ log_dir: str | None = None,
+ submit_dir: str | None = None,
+ monitor: bool = True,
+ dry_run: bool = False,
) -> None:
"""
- Launch Slurm array jobs for a subset [start_index, end_index] (inclusive) of the volume.
- If end_index is None, the last slice of the volume is used.
+ Launch SLURM array jobs for a subset [start_index, end_index) of the volume.
+
+ Parameters
+ ----------
+ conf_file_path : str
+ Path to cardiotensor configuration file.
+ start_index : int
+ Global start index (inclusive).
+ end_index : int | None
+ Global end index (exclusive). If None, process until the last slice.
+ monitor : bool
+ If True, wait and monitor outputs after submission.
+ dry_run : bool
+ If True, generate scripts but do not submit jobs.
"""
try:
params = read_conf_file(conf_file_path)
- except Exception as e:
- print(f"⚠️ Error reading parameter file '{conf_file_path}': {e}", flush=True)
+ except Exception as err:
+ print(f"⚠️ Error reading parameter file '{conf_file_path}': {err}", flush=True)
sys.exit(1)
- VOLUME_PATH = params.get("IMAGES_PATH", "")
- OUTPUT_DIR = params.get("OUTPUT_PATH", "./output")
- N_CHUNK = int(params.get("N_CHUNK", 100))
- IS_TEST = params.get("TEST", False)
+ volume_path = params.get("IMAGES_PATH", "")
+ output_dir = params.get("OUTPUT_PATH", "./output")
+ output_format = params.get("OUTPUT_FORMAT", "jp2")
+ angle_mode = str(params.get("ANGLE_MODE", "ha_ia")).strip().lower()
+ write_angles = bool(params.get("WRITE_ANGLES", True))
+ write_vectors = bool(params.get("WRITE_VECTORS", False))
+ is_test = bool(params.get("TEST", False))
- if IS_TEST is True:
+ if is_test:
sys.exit(
- "Test mode activated, run directly 3D_processing.py or deactivate test mode in the parameter file"
+ "Test mode is enabled. Disable TEST in the configuration for SLURM runs."
)
- data_reader = DataReader(VOLUME_PATH)
+ default_chunk_size = int(params.get("N_CHUNK", 100))
+ chunk_size = default_chunk_size if chunk_size is None else int(chunk_size)
+ partition = None if partition is None else str(partition).strip()
+ if partition == "":
+ partition = None
+ time_limit = "2:00:00" if time_limit is None else str(time_limit).strip()
+ cpus_per_task = 8 if cpus_per_task is None else int(cpus_per_task)
+ mem_gb = 64 if mem_gb is None else int(mem_gb)
+ array_parallel = 100 if array_parallel is None else int(array_parallel)
+ default_log_dir = os.path.join(output_dir, "slurm", "log")
+ default_submit_dir = os.path.join(output_dir, "slurm", "submit")
+ log_dir = default_log_dir if log_dir is None else str(log_dir)
+ submit_dir = default_submit_dir if submit_dir is None else str(submit_dir)
+
+ if chunk_size <= 0:
+ raise ValueError("chunk_size must be > 0")
+ if cpus_per_task <= 0:
+ raise ValueError("cpus_per_task must be > 0")
+ if mem_gb <= 0:
+ raise ValueError("mem_gb must be > 0")
+ if array_parallel <= 0:
+ raise ValueError("array_parallel must be > 0")
+
+ data_reader = DataReader(volume_path)
total_slices = int(data_reader.shape[0])
+ if total_slices <= 0:
+ raise ValueError(f"Dataset at {volume_path} contains no slices.")
- # ----- sanitize window -----
first = max(0, int(start_index))
- last = total_slices - 1 if end_index is None else int(end_index)
- if last < 0:
- last = total_slices - 1
-
- # clamp
- first = max(0, min(first, total_slices - 1))
- last = max(0, min(last, total_slices - 1))
+ last_exclusive = total_slices if end_index is None else int(end_index)
+ last_exclusive = max(0, min(last_exclusive, total_slices))
- if last < first:
- print(
- f"⚠️ Invalid range: start_index ({first}) > end_index ({last})", flush=True
+ if last_exclusive <= first:
+ raise ValueError(
+ f"Invalid range: start_index={first}, end_index={last_exclusive} "
+ f"(must satisfy start_index < end_index <= {total_slices})."
)
- sys.exit(1)
- window_len = last - first + 1
+ window_len = last_exclusive - first
print(
- f"Processing slice window [{first}, {last}] (len={window_len}) out of 0..{total_slices - 1}",
+ f"Processing slice window [{first}, {last_exclusive}) "
+ f"(len={window_len}) out of 0..{total_slices}",
flush=True,
)
+ print(
+ "SLURM settings: "
+ f"partition={partition}, time_limit={time_limit}, cpus_per_task={cpus_per_task}, "
+ f"mem_gb={mem_gb}, array_parallel={array_parallel}, chunk_size={chunk_size}",
+ flush=True,
+ )
+ print(f"SLURM paths: log_dir={log_dir}, submit_dir={submit_dir}", flush=True)
- mem_needed = 128
-
- # ----- build per-job intervals (inclusive) -----
def build_intervals(
- first_idx: int, last_idx: int, step: int
+ first_idx: int, last_idx_exclusive: int, step: int
) -> list[tuple[int, int]]:
- out = []
+ out: list[tuple[int, int]] = []
s = first_idx
- while s <= last_idx:
- e = min(s + step - 1, last_idx)
+ while s < last_idx_exclusive:
+ e = min(s + step, last_idx_exclusive)
out.append((s, e))
- s = e + 1
+ s = e
return out
- intervals = build_intervals(first, last, N_CHUNK)
+ intervals = build_intervals(first, last_exclusive, chunk_size)
n_jobs_total = len(intervals)
print(
- f"Splitting data into {n_jobs_total} jobs of up to {N_CHUNK} slices each",
+ f"Splitting data into {n_jobs_total} jobs of up to {chunk_size} slices each",
flush=True,
)
- # ----- batch into arrays of <= 999 tasks -----
- N_job_max_per_array = 999
+ max_tasks_per_array = 999
batched = [
- intervals[i : i + N_job_max_per_array]
- for i in range(0, n_jobs_total, N_job_max_per_array)
+ intervals[i : i + max_tasks_per_array]
+ for i in range(0, n_jobs_total, max_tasks_per_array)
]
print(
- f"Launching {len(batched)} arrays (tasks per array: {[len(b) for b in batched]})",
+ f"Launching {len(batched)} array batch(es) "
+ f"(tasks per batch: {[len(batch) for batch in batched]})",
flush=True,
)
- python_file_path = os.path.abspath(inspect.getfile(compute_orientation))
+ job_ids: list[int] = []
start_t = time.time()
-
for batch in batched:
batch_start = batch[0][0]
- batch_end = batch[-1][1] # inclusive
+ batch_end_exclusive = batch[-1][1]
job_id = submit_job_to_slurm(
- python_file_path,
conf_file_path,
batch_start,
- batch_end,
- N_chunk=N_CHUNK,
- mem_needed=mem_needed,
- )
- print(
- f"Submitted array for [{batch_start}, {batch_end}] (job ID: {job_id})",
- flush=True,
+ batch_end_exclusive,
+ chunk_size,
+ partition=partition,
+ time_limit=time_limit,
+ cpus_per_task=cpus_per_task,
+ mem_gb=mem_gb,
+ array_parallel=array_parallel,
+ log_dir=log_dir,
+ submit_dir=submit_dir,
+ dry_run=dry_run,
)
+ if job_id is not None:
+ job_ids.append(job_id)
+
+ if dry_run:
+ print("Dry run complete. No jobs were submitted.", flush=True)
+ return
+
+ if not monitor:
+ print("Submission complete. Monitoring disabled by user.", flush=True)
+ return
+
+ monitor_job_output(
+ output_directory=output_dir,
+ start_index=first,
+ end_index_exclusive=last_exclusive,
+ output_format=output_format,
+ angle_mode=angle_mode,
+ write_angles=write_angles,
+ write_vectors=write_vectors,
+ )
- # monitor only the requested window
- monitor_job_output(OUTPUT_DIR, window_len, conf_file_path)
+ elapsed = time.time() - start_t
+ print(
+ f"SLURM jobs submitted: {job_ids if job_ids else '[unknown ids]'}\n"
+ f"Elapsed submit+monitor time (s): {elapsed:.1f}",
+ flush=True,
+ )
+
+
+def _count_files_in_range(
+ folder: str,
+ prefix: str,
+ extension: str,
+ start_index: int,
+ end_index_exclusive: int,
+) -> int:
+ """
+ Count files named like {prefix}_{index:06d}.{extension} within [start, end).
+ """
+ if not os.path.isdir(folder):
+ return 0
- print(f"Execution seconds: {time.time() - start_t}", flush=True)
+ ext = extension.lstrip(".")
+ pattern = os.path.join(folder, f"{prefix}_*.{ext}")
+ rgx = re.compile(rf"^{re.escape(prefix)}_(\d+)\.{re.escape(ext)}$")
+
+ count = 0
+ for file_path in glob.glob(pattern):
+ name = os.path.basename(file_path)
+ match = rgx.match(name)
+ if match is None:
+ continue
+ idx = int(match.group(1))
+ if start_index <= idx < end_index_exclusive:
+ count += 1
+ return count
def monitor_job_output(
- output_directory: str, total_images: int, file_extension: str
+ output_directory: str,
+ start_index: int,
+ end_index_exclusive: int,
+ output_format: str = "jp2",
+ angle_mode: str = "ha_ia",
+ write_angles: bool = True,
+ write_vectors: bool = False,
+ poll_interval_sec: int = 60,
) -> None:
"""
- Monitor OUTPUT_DIR/HA until total_images files appear (subset-aware).
+ Monitor output progress for the requested index range.
+
+ The monitor tracks one representative output per slice:
+ - HA or AZ image when `write_angles=True`
+ - eigen_vec when only vectors are written
"""
- start_time = time.time()
- time.sleep(1)
- tmp_count = len(glob.glob(f"{output_directory}/HA/*"))
- while True:
- current_files_count = len(glob.glob(f"{output_directory}/HA/*"))
+ total_images = end_index_exclusive - start_index
+ if total_images <= 0:
+ return
+
+ if write_angles:
+ if angle_mode == "az_el":
+ mode_prefix = "AZ"
+ else:
+ mode_prefix = "HA"
+ folder = os.path.join(output_directory, mode_prefix)
+ extension = output_format
+ prefix = mode_prefix
+ elif write_vectors:
+ folder = os.path.join(output_directory, "eigen_vec")
+ extension = "npy"
+ prefix = "eigen_vec"
+ else:
+ print(
+ "No angle/vector outputs requested; skipping monitor (nothing to track).",
+ flush=True,
+ )
+ return
- processed = current_files_count
+ print(
+ f"Monitoring outputs in {folder} for range [{start_index}, {end_index_exclusive})",
+ flush=True,
+ )
+
+ start_t = time.time()
+ prev_count = _count_files_in_range(
+ folder, prefix, extension, start_index, end_index_exclusive
+ )
+ while True:
+ current_count = _count_files_in_range(
+ folder, prefix, extension, start_index, end_index_exclusive
+ )
+ processed = current_count
+ remaining = max(total_images - processed, 0)
print(f"{processed}/{total_images} processed", flush=True)
- if current_files_count > tmp_count:
- rate = (
- current_files_count - tmp_count
- ) # images per minute (since we sleep 60s)
- remaining = max(total_images - processed, 0)
- eta_min = remaining / rate if rate > 0 else float("inf")
+ if processed >= total_images:
+ break
+
+ delta = current_count - prev_count
+ if delta > 0:
+ rate_per_min = delta * (60.0 / max(poll_interval_sec, 1))
+ eta_min = remaining / rate_per_min if rate_per_min > 0 else float("inf")
print(
- f"{current_files_count - tmp_count} images processed in 60sec. "
- f"Approximately {eta_min:.2f} minutes remaining",
+ f"{delta} new files in last {poll_interval_sec}s. "
+ f"Approx. {eta_min:.2f} minutes remaining.",
flush=True,
)
- tmp_count = current_files_count
-
- if processed >= total_images:
- break
- print(f"Processing time (s): {time.time() - start_time:.1f}", flush=True)
- print("\nWaiting 60 seconds...\n", flush=True)
- time.sleep(60)
+ prev_count = current_count
+ print(f"Elapsed time (s): {time.time() - start_t:.1f}", flush=True)
+ print(f"Waiting {poll_interval_sec} seconds...\n", flush=True)
+ time.sleep(poll_interval_sec)
def is_chunk_done(
- output_dir: str, start: int, end: int, output_format: str = "jp2"
+ output_dir: str,
+ start: int,
+ end: int,
+ output_format: str = "jp2",
+ angle_mode: str = "ha_ia",
) -> bool:
"""
- Check if all output files (HA, IA, FA) for a given chunk are already present.
-
- Args:
- output_dir (str): Base output directory containing HA/IA/FA folders.
- start (int): Start index of the chunk (inclusive).
- end (int): End index of the chunk (exclusive).
- output_format (str): File extension for the output images (e.g., "jp2", "tif").
-
- Returns:
- bool: True if all expected output files exist, False otherwise.
+ Check if all output files for a given chunk [start, end) are already present.
"""
+ ext = output_format.lstrip(".")
+ mode = angle_mode.lower().strip()
+ if mode == "az_el":
+ angle1, angle2 = "AZ", "EL"
+ else:
+ angle1, angle2 = "HA", "IA"
+
for idx in range(start, end):
expected_files = [
- f"{output_dir}/HA/HA_{idx:06d}.{output_format}",
- f"{output_dir}/IA/IA_{idx:06d}.{output_format}",
- f"{output_dir}/FA/FA_{idx:06d}.{output_format}",
+ f"{output_dir}/{angle1}/{angle1}_{idx:06d}.{ext}",
+ f"{output_dir}/{angle2}/{angle2}_{idx:06d}.{ext}",
+ f"{output_dir}/FA/FA_{idx:06d}.{ext}",
]
- if not all(os.path.exists(f) for f in expected_files):
+ if not all(os.path.exists(path) for path in expected_files):
return False
return True
diff --git a/src/cardiotensor/orientation/orientation_computation_functions.py b/src/cardiotensor/orientation/orientation_computation_functions.py
index 7b1bba78..9a146cc9 100644
--- a/src/cardiotensor/orientation/orientation_computation_functions.py
+++ b/src/cardiotensor/orientation/orientation_computation_functions.py
@@ -12,6 +12,7 @@
from cardiotensor.utils.utils import convert_to_8bit
+from cardiotensor.colormaps.helix_angle import helix_angle_cmap
from concurrent.futures import ProcessPoolExecutor
from .multiprocessing_MDI import parallel_mdi_analysis
@@ -570,79 +571,6 @@ def compute_azimuth_and_elevation(
return az, el
-# def plot_images(
-# img: np.ndarray,
-# img_angle1: np.ndarray,
-# img_angle2: np.ndarray,
-# img_FA: np.ndarray,
-# center_point: tuple[int, int, int],
-# colormap_angle=None,
-# colormap_FA=None,
-# angle1_title: str = "Helix Angle",
-# angle2_title: str = "Intrusion Angle",
-# ):
-# """
-# Plots images of the heart with helix, intrusion, and FA annotations.
-
-# Args:
-# img (np.ndarray): Grayscale image of the heart.
-# img_helix (np.ndarray): Helix angle image.
-# img_intrusion (np.ndarray): Intrusion angle image.
-# img_FA (np.ndarray): Fractional Anisotropy (FA) image.
-# center_point (Tuple[int, int, int]): Coordinates of the center point.
-# colormap_angle: Colormap for helix and intrusion angles (default: helix_angle_cmap).
-# colormap_FA: Colormap for FA image (default: 'inferno').
-
-# Returns:
-# None
-# """
-
-
-# # Default colormaps
-# if colormap_angle is None:
-# colormap_angle = helix_angle_cmap
-# if colormap_FA is None:
-# colormap_FA = plt.get_cmap("inferno")
-
-# # Determine display range for original image
-# img_vmin, img_vmax = np.nanpercentile(img, (5, 95))
-
-# # Create a figure and axes
-# fig, axes = plt.subplots(2, 2, figsize=(10, 8))
-# ax = axes
-
-# # Original Image with Red Point
-# ax[0, 0].imshow(img, vmin=img_vmin, vmax=img_vmax, cmap="gray")
-# x, y = center_point[0:2]
-# ax[0, 0].scatter(x, y, c="red", s=50, marker="o", label="Axis Point")
-# ax[0, 0].set_title("Original Image")
-# ax[0, 0].legend(loc="upper right")
-
-# # Helix Image
-# tmp = ax[0, 1].imshow(img_angle1, cmap=colormap_angle, vmin=-90, vmax=90)
-# ax[0, 1].set_title(angle1_title)
-
-# # Intrusion Image
-# ax[1, 0].imshow(img_angle2, cmap=colormap_angle, vmin=-90, vmax=90)
-# ax[1, 0].set_title(angle2_title)
-
-# # FA Image
-# fa_plot = ax[1, 1].imshow(img_FA, cmap=colormap_FA, vmin=0, vmax=1)
-# ax[1, 1].set_title("Fractional Anisotropy")
-
-# # Add colorbars for relevant subplots
-# cbar1 = fig.colorbar(tmp, ax=ax[0, 1], orientation="vertical")
-# cbar1.set_label(angle1_title)
-# cbar2 = fig.colorbar(fa_plot, ax=ax[1, 1], orientation="vertical")
-# cbar2.set_label("Fractional Anisotropy")
-
-# # Hide axes for a cleaner view
-# for axis in ax.flat:
-# axis.axis("off")
-
-# # Adjust layout to prevent overlap
-# fig.tight_layout()
-# plt.show()
def plot_images(
@@ -673,7 +601,7 @@ def plot_images(
Integer voxel coordinates (z, y, x) of the centerline point on this slice.
Only (y, x) is used here for the marker.
colormap_angle : matplotlib colormap, optional
- Colormap for angles. Defaults to plt.cm.hsv if None.
+ Colormap for angles. Defaults to helix_angle_cmap if None.
colormap_FA : matplotlib colormap, optional
Colormap for FA. Defaults to plt.cm.magma if None.
angle1_title : str
@@ -686,7 +614,7 @@ def plot_images(
This function shows the centerline marker on the source panel.
"""
if colormap_angle is None:
- colormap_angle = plt.cm.hsv
+ colormap_angle = helix_angle_cmap
if colormap_FA is None:
colormap_FA = plt.cm.magma
@@ -717,140 +645,6 @@ def plot_images(
plt.show()
-# def write_images(
-# img_angle1: np.ndarray,
-# img_angle2: np.ndarray,
-# img_FA: np.ndarray,
-# start_index: int,
-# output_dir: str,
-# output_format: str,
-# output_type: str,
-# z: int,
-# colormap_angle=None,
-# colormap_FA=None,
-# angle_names: tuple[str, str] = ("HA", "IA"),
-# angle_ranges: tuple[tuple[float, float], tuple[float, float]] = ((-90, 90), (-90, 90)),
-# ) -> None:
-
-# # angle_names drives subfolders, angle_ranges drives normalization
-# name1, name2 = angle_names
-# (a1_min, a1_max), (a2_min, a2_max) = angle_ranges
-
-# os.makedirs(f"{output_dir}/{name1}", exist_ok=True)
-# os.makedirs(f"{output_dir}/{name2}", exist_ok=True)
-# os.makedirs(f"{output_dir}/FA", exist_ok=True)
-
-# if "8bit" in output_type:
-# img1_8 = convert_to_8bit(img_angle1, min_value=a1_min, max_value=a1_max)
-# img2_8 = convert_to_8bit(img_angle2, min_value=a2_min, max_value=a2_max)
-# imgFA_8 = convert_to_8bit(img_FA, min_value=0, max_value=1)
-
-# if output_format == "jp2":
-# # same glymur writes, just using name1/name2
-# glymur.Jp2k(f"{output_dir}/{name1}/{name1}_{(start_index+z):06d}.jp2",
-# data=img1_8, cratios=[10], numres=8, irreversible=True)
-# glymur.Jp2k(f"{output_dir}/{name2}/{name2}_{(start_index+z):06d}.jp2",
-# data=img2_8, cratios=[10], numres=8, irreversible=True)
-# glymur.Jp2k(f"{output_dir}/FA/FA_{(start_index+z):06d}.jp2",
-# data=imgFA_8, cratios=[10], numres=8, irreversible=True)
-# elif output_format == "tif":
-# tifffile.imwrite(f"{output_dir}/{name1}/{name1}_{(start_index+z):06d}.tif", img1_8)
-# tifffile.imwrite(f"{output_dir}/{name2}/{name2}_{(start_index+z):06d}.tif", img2_8)
-# tifffile.imwrite(f"{output_dir}/FA/FA_{(start_index+z):06d}.tif", imgFA_8)
-# else:
-# sys.exit(f"I don't recognise the output_format ({output_format})")
-
-
-# # ---- RGB output ----
-# elif "rgb" in output_type:
-
-# def write_img_rgb(
-# img: np.ndarray,
-# output_path: str,
-# cmap: plt.Colormap,
-# vmin: float,
-# vmax: float,
-# ) -> None:
-# """
-# Writes a single 2D RGB image using a fixed colormap range.
-
-# Args:
-# img (np.ndarray): Input scalar image.
-# output_path (str): Path to save the RGB image.
-# cmap (plt.Colormap): Matplotlib colormap (e.g., inferno, custom HA cmap).
-# vmin (float): Minimum value for normalization.
-# vmax (float): Maximum value for normalization.
-# """
-# img_clipped = np.clip(img, vmin, vmax)
-# img_norm = (img_clipped - vmin) / (vmax - vmin + 1e-8)
-
-# img_rgb = cmap(img_norm)[..., :3] # Drop alpha channel
-# img_rgb = (img_rgb * 255).astype(np.uint8)
-
-# print(img_rgb.shape, img_rgb.dtype)
-
-# if output_path.endswith(".jp2"):
-# ratio_compression = 10
-# glymur.Jp2k(
-# output_path,
-# data=img_rgb,
-# cratios=[ratio_compression],
-# numres=8,
-# irreversible=True,
-# )
-# elif output_path.endswith(".tif"):
-# tifffile.imwrite(output_path, img_rgb)
-# else:
-# sys.exit(f"I don't recognise the output path format: {output_path}")
-
-# if output_format == "jp2":
-# write_img_rgb(
-# img_helix,
-# f"{output_dir}/HA/HA_{(start_index + z):06d}.jp2",
-# cmap=colormap_angle,
-# vmin=-90,
-# vmax=90,
-# )
-# write_img_rgb(
-# img_intrusion,
-# f"{output_dir}/IA/IA_{(start_index + z):06d}.jp2",
-# cmap=colormap_angle,
-# vmin=-90,
-# vmax=90,
-# )
-# write_img_rgb(
-# img_FA,
-# f"{output_dir}/FA/FA_{(start_index + z):06d}.jp2",
-# cmap=colormap_FA,
-# vmin=0,
-# vmax=1,
-# )
-
-# elif output_format == "tif":
-# write_img_rgb(
-# img_helix,
-# f"{output_dir}/HA/HA_{(start_index + z):06d}.tif",
-# cmap=colormap_angle,
-# vmin=-90,
-# vmax=90,
-# )
-# write_img_rgb(
-# img_intrusion,
-# f"{output_dir}/IA/IA_{(start_index + z):06d}.tif",
-# cmap=colormap_angle,
-# vmin=-90,
-# vmax=90,
-# )
-# write_img_rgb(
-# img_FA,
-# f"{output_dir}/FA/FA_{(start_index + z):06d}.tif",
-# cmap=colormap_FA,
-# vmin=0,
-# vmax=1,
-# )
-
-# else:
-# sys.exit(f"I don't recognise the output_format ({output_format})")
def write_img_rgb(
@@ -875,7 +669,7 @@ def write_img_rgb(
vmax : float
Maximum for normalization.
colormap : matplotlib colormap, optional
- Colormap to apply, for example plt.cm.hsv. If None, use plt.cm.hsv.
+ Colormap to apply. If None, use helix_angle_cmap.
output_format : {"jp2", "tif"}
Output format. Uses glymur for jp2 and tifffile for tif.
@@ -884,7 +678,7 @@ def write_img_rgb(
The function normalizes to [0, 1], applies the colormap, then writes uint8 RGB.
"""
if colormap is None:
- colormap = plt.cm.hsv
+ colormap = helix_angle_cmap
denom = (vmax - vmin) if (vmax - vmin) != 0 else 1.0
x = (img.astype(np.float32) - vmin) / denom
@@ -942,7 +736,7 @@ def write_images(
z : int
Current z offset used to compute the running index in filenames.
colormap_angle : matplotlib colormap, optional
- Colormap for angles in "rgb" mode. Defaults to plt.cm.hsv if None.
+ Colormap for angles in "rgb" mode. Defaults to helix_angle_cmap if None.
colormap_FA : matplotlib colormap, optional
Colormap for FA in "rgb" mode. Defaults to plt.cm.magma if None.
angle_names : tuple[str, str]
@@ -1000,7 +794,7 @@ def write_images(
elif output_type == "rgb":
if colormap_angle is None:
- colormap_angle = plt.cm.hsv
+ colormap_angle = helix_angle_cmap
if colormap_FA is None:
colormap_FA = plt.cm.magma
diff --git a/src/cardiotensor/orientation/orientation_computation_pipeline.py b/src/cardiotensor/orientation/orientation_computation_pipeline.py
index a5d1864b..13b28114 100644
--- a/src/cardiotensor/orientation/orientation_computation_pipeline.py
+++ b/src/cardiotensor/orientation/orientation_computation_pipeline.py
@@ -7,8 +7,10 @@
import numpy as np
from alive_progress import alive_bar
+from matplotlib import pyplot as plt
# from memory_profiler import profile
+from cardiotensor.colormaps.helix_angle import helix_angle_cmap
from cardiotensor.orientation.orientation_computation_functions import (
adjust_start_end_index,
calculate_center_vector,
@@ -31,6 +33,24 @@
# --- small helpers ---
+def _resolve_colormap(colormap: str | None):
+ """Resolve colormap names, including the project-specific helix angle map."""
+ if colormap is None:
+ return None
+ cmap_name = colormap.strip()
+ if not cmap_name:
+ return None
+ if cmap_name.lower() in {"helix_angle", "helix_angle_cmap"}:
+ return helix_angle_cmap
+ try:
+ return plt.get_cmap(cmap_name)
+ except ValueError as err:
+ raise ValueError(
+ f"Unknown colormap '{colormap}'. Use a valid matplotlib colormap name "
+ "or 'helix_angle'."
+ ) from err
+
+
def check_already_processed(
output_dir: str,
start_index: int,
@@ -147,6 +167,7 @@ def compute_orientation(
n_slice_test: int | None = None,
start_index: int = 0,
end_index: int | None = None,
+ colormap: str | None = None,
write_MDI: bool = False
) -> None:
"""
@@ -170,6 +191,7 @@ def compute_orientation(
n_slice_test: Number of slices to process in test mode.
start_index: Start slice index.
end_index: End slice index (None = last slice).
+ colormap: Colormap name for RGB angle outputs. Defaults to helix-angle map.
"""
# --- Sanity checks ---
@@ -197,6 +219,7 @@ def compute_orientation(
- Write vectors: {write_vectors}
- Use GPU: {use_gpu}
- Test mode: {is_test}
+ - Colormap: {colormap or "[default]"}
""")
print("\n" + "-" * 40)
@@ -391,6 +414,7 @@ def update_bar(_):
MDI_vol[z, :, :] if write_MDI else None,
is_test,
angle_mode,
+ colormap,
),
callback=update_bar,
)
@@ -422,6 +446,7 @@ def update_bar(_):
MDI_vol[z, :, :] if write_MDI else None,
is_test,
angle_mode,
+ colormap,
)
bar()
@@ -448,6 +473,7 @@ def compute_slice_angles_and_anisotropy(
MDI_slice: np.ndarray = None,
is_test: bool = False,
angle_mode: str = "ha_ia",
+ colormap: str | None = None,
) -> None:
"""
Compute either HA/IA or Azimuth/Elevation plus FA for a single slice,
@@ -466,6 +492,7 @@ def compute_slice_angles_and_anisotropy(
ext = output_format.lstrip(".")
idx = start_index + z
+ colormap_angle = _resolve_colormap(colormap)
# Expected outputs for skip logic
expected_paths = []
@@ -537,6 +564,7 @@ def compute_slice_angles_and_anisotropy(
img_angle2,
img_FA,
center_point,
+ colormap_angle=colormap_angle,
angle1_title=titles[0],
angle2_title=titles[1],
)
@@ -549,6 +577,7 @@ def compute_slice_angles_and_anisotropy(
ext,
output_type,
z,
+ colormap_angle=colormap_angle,
angle_names=angle_names,
angle_ranges=angle_ranges,
)
@@ -574,6 +603,7 @@ def compute_slice_angles_and_anisotropy(
ext,
output_type,
z,
+ colormap_angle=colormap_angle,
angle_names=angle_names,
angle_ranges=angle_ranges,
)
diff --git a/src/cardiotensor/scripts/compute_orientation.py b/src/cardiotensor/scripts/compute_orientation.py
index 90cfee8d..e3170bb0 100644
--- a/src/cardiotensor/scripts/compute_orientation.py
+++ b/src/cardiotensor/scripts/compute_orientation.py
@@ -44,12 +44,20 @@ def script() -> None:
action="store_true",
help="Process slices in reverse order starting from the end.",
)
+
+ parser.add_argument(
+ "--colormap",
+ type=str,
+ default=None,
+ help="Colormap to apply, for example 'hsv'. If None, use helix_angle_cmap.",
+ )
args = parser.parse_args()
conf_file_path = args.conf_file_path
start_index = args.start_index
end_index = args.end_index
reverse = args.reverse
+ colormap = args.colormap
# --- Read configuration ---
try:
@@ -114,6 +122,7 @@ def script() -> None:
n_slice_test=n_slice_test,
start_index=start_index,
end_index=end_index,
+ colormap=colormap,
)
print(f"--- {time.time() - t0:.1f} seconds (TEST mode) ---")
return
@@ -157,6 +166,7 @@ def script() -> None:
n_slice_test=n_slice_test,
start_index=s,
end_index=e,
+ colormap=colormap,
write_MDI=write_MDI
)
diff --git a/src/cardiotensor/scripts/slurm_launcher.py b/src/cardiotensor/scripts/slurm_launcher.py
index 2752d478..2eb02c93 100644
--- a/src/cardiotensor/scripts/slurm_launcher.py
+++ b/src/cardiotensor/scripts/slurm_launcher.py
@@ -9,13 +9,12 @@
def script() -> None:
"""
- Main script to process 3D data. Reads configuration files, launches processing tasks,
- and logs processing time.
+ Submit cardiotensor processing as SLURM array jobs.
"""
- # Parse the configuration file path from command-line arguments
parser = argparse.ArgumentParser(
- description="Process 3D data using the specified configuration file."
+ description="Launch cardio-tensor jobs on a SLURM cluster.",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument(
"conf_file_path", type=str, help="Path to the input configuration file."
@@ -30,14 +29,83 @@ def script() -> None:
"--end_index",
type=int,
default=None,
- help="Ending slice index (default: None, processes all slices).",
+ help="Ending slice index (exclusive). Default: None (process until end).",
+ )
+ parser.add_argument(
+ "--chunk_size",
+ type=int,
+ default=None,
+ help="Slices per SLURM task. If omitted, uses N_CHUNK from config.",
+ )
+ parser.add_argument(
+ "--partition",
+ type=str,
+ default=None,
+ help="SLURM partition name. If omitted, no partition directive is added.",
+ )
+ parser.add_argument(
+ "--time_limit",
+ type=str,
+ default="2:00:00",
+ help="SLURM time limit (e.g., 2:00:00).",
+ )
+ parser.add_argument(
+ "--cpus_per_task",
+ type=int,
+ default=8,
+ help="SLURM CPUs per task.",
+ )
+ parser.add_argument(
+ "--mem_gb",
+ type=int,
+ default=64,
+ help="SLURM memory per task in GB.",
+ )
+ parser.add_argument(
+ "--array_parallel",
+ type=int,
+ default=100,
+ help="Maximum concurrent tasks in SLURM array.",
+ )
+ parser.add_argument(
+ "--log_dir",
+ type=str,
+ default=None,
+ help="Directory for SLURM logs. If omitted, uses OUTPUT_PATH/slurm/log.",
+ )
+ parser.add_argument(
+ "--submit_dir",
+ type=str,
+ default=None,
+ help="Directory where .slurm scripts are stored. If omitted, uses OUTPUT_PATH/slurm/submit.",
+ )
+ parser.add_argument(
+ "--no_monitor",
+ action="store_true",
+ help="Do not wait and monitor output files after submission.",
+ )
+ parser.add_argument(
+ "--dry_run",
+ action="store_true",
+ help="Generate scripts and print sbatch commands without submitting.",
)
args = parser.parse_args()
conf_file_path = args.conf_file_path
- # Launch processing using slurm_launcher
slurm_launcher(
- conf_file_path, start_index=args.start_index, end_index=args.end_index
+ conf_file_path,
+ start_index=args.start_index,
+ end_index=args.end_index,
+ chunk_size=args.chunk_size,
+ partition=args.partition,
+ time_limit=args.time_limit,
+ cpus_per_task=args.cpus_per_task,
+ mem_gb=args.mem_gb,
+ array_parallel=args.array_parallel,
+ log_dir=args.log_dir,
+ submit_dir=args.submit_dir,
+ monitor=not args.no_monitor,
+ dry_run=args.dry_run,
)