From 651b83b25973ef6e5dd8242f2bc3c72212811a0e Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauldmccarthy@gmail.com>
Date: Tue, 28 Jan 2025 15:59:05 +0000
Subject: [PATCH] New tests for flirt -applyxfm

---
 ...m_usesqform_interp_nearestneighbour.nii.gz |  3 +
 .../applyxfm_usesqform_interp_sinc.nii.gz     |  3 +
 .../applyxfm_usesqform_interp_spline.nii.gz   |  3 +
 ...qform_interp_spline_setbackground_0.nii.gz |  3 +
 ...applyxfm_usesqform_interp_trilinear.nii.gz |  3 +
 unit_tests/flirt/applyxfm/feedsRun            | 66 +++++++++++++++++++
 6 files changed, 81 insertions(+)
 create mode 100644 unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_nearestneighbour.nii.gz
 create mode 100644 unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_sinc.nii.gz
 create mode 100644 unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_spline.nii.gz
 create mode 100644 unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_spline_setbackground_0.nii.gz
 create mode 100644 unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_trilinear.nii.gz
 create mode 100755 unit_tests/flirt/applyxfm/feedsRun

diff --git a/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_nearestneighbour.nii.gz b/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_nearestneighbour.nii.gz
new file mode 100644
index 0000000..2045c8a
--- /dev/null
+++ b/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_nearestneighbour.nii.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:772a19c88d11623d36249c01c12670572972483a2b3ae10cb484c4e54d0a78d8
+size 21168
diff --git a/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_sinc.nii.gz b/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_sinc.nii.gz
new file mode 100644
index 0000000..fa91759
--- /dev/null
+++ b/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_sinc.nii.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:90451ad2f5f4d95ace8c1a359519faef00ae7c0f10b3b408e1324e22099e57c7
+size 28509
diff --git a/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_spline.nii.gz b/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_spline.nii.gz
new file mode 100644
index 0000000..1a1be39
--- /dev/null
+++ b/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_spline.nii.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7816784412de61033c29fb913dccefe571217cbfc53fd303dfff3ac59a6fa0a2
+size 28524
diff --git a/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_spline_setbackground_0.nii.gz b/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_spline_setbackground_0.nii.gz
new file mode 100644
index 0000000..9f4c687
--- /dev/null
+++ b/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_spline_setbackground_0.nii.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:317fa432b387a3409d72941b9ed65aba3d76469334cde4e44c88d3a68ba718b5
+size 28672
diff --git a/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_trilinear.nii.gz b/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_trilinear.nii.gz
new file mode 100644
index 0000000..a368dd0
--- /dev/null
+++ b/unit_tests/flirt/applyxfm/benchmarks/applyxfm_usesqform_interp_trilinear.nii.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d107660bfb61d6156c7525a7e3cff46bda9d1865046b62bf85c2e184712d2a3c
+size 28475
diff --git a/unit_tests/flirt/applyxfm/feedsRun b/unit_tests/flirt/applyxfm/feedsRun
new file mode 100755
index 0000000..4a96a86
--- /dev/null
+++ b/unit_tests/flirt/applyxfm/feedsRun
@@ -0,0 +1,66 @@
+#!/usr/bin/env fslpython
+#
+# Test basic flirt -applyxfm behaviour
+#
+
+
+import os.path as op
+import os
+import sys
+
+import fsl.data.image as fslimage
+import fsl.utils.run as run
+
+import numpy as np
+
+
+thisdir = op.dirname(op.abspath(__file__))
+
+
+def compare_images(a, b):
+
+    print(f'Comparing images {a} and {b}')
+
+    a     = fslimage.Image(a)
+    b     = fslimage.Image(b)
+    adata = a.data
+    bdata = b.data
+
+    assert a.sameSpace(b)
+    assert np.all(np.isclose(adata, bdata))
+
+
+def test_applyxfm():
+    fsldir     = os.environ['FSLDIR']
+    std2mm     = op.join(fsldir, 'data', 'standard', 'MNI152_T1_2mm.nii.gz')
+    std1mm     = op.join(fsldir, 'data', 'standard', 'MNI152_T1_1mm.nii.gz')
+    std2mm_roi = 'std2mm_roi.nii.gz'
+
+    # use a ROI to reduce storage and test extrapolation behaviour
+    run.runfsl(f'fslroi {std2mm} {std2mm_roi} 40 10 40 10 40 10')
+
+    tests  = [
+        '-applyxfm -usesqform -interp nearestneighbour',
+        '-applyxfm -usesqform -interp trilinear',
+        '-applyxfm -usesqform -interp sinc',
+        '-applyxfm -usesqform -interp spline',
+        '-applyxfm -usesqform -interp spline -setbackground 0',
+    ]
+
+    for test in tests:
+        outfname = '_'.join(test.replace('-', '').split())
+        outfname = f'{outfname}.nii.gz'
+        cmd      = f'flirt -in {std2mm_roi} -ref {std1mm} -out {outfname} {test}'
+
+        run.runfsl(cmd)
+
+        expfname = op.join(thisdir, 'benchmarks', outfname)
+
+        compare_images(outfname, expfname)
+
+
+
+if __name__ == '__main__':
+    if len(sys.argv) > 1:
+        os.chdir(sys.argv[1])
+    test_applyxfm()
-- 
GitLab