From 58945831d6df9ca84cdb9f951fab6f19f755e2a2 Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauldmccarthy@gmail.com>
Date: Mon, 8 Jul 2024 13:44:22 +0100
Subject: [PATCH] TEST: Test FEATImage f-test accessors

---
 fsl/tests/__init__.py                            |  8 +++++++-
 fsl/tests/test_featimage.py                      | 16 ++++++++++++----
 .../test_feat/1stlevel_3.feat/design.fts         |  5 +++++
 .../2ndlevel_2.gfeat/cope1.feat/design.fts       |  5 +++++
 .../cope2.feat/cluster_mask_zfstat1.nii.gz       |  1 +
 .../2ndlevel_2.gfeat/cope2.feat/design.fts       |  5 +++++
 .../cope2.feat/stats/zfstat1.nii.gz              |  1 +
 7 files changed, 36 insertions(+), 5 deletions(-)
 create mode 100644 fsl/tests/testdata/test_feat/1stlevel_3.feat/design.fts
 create mode 100644 fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope1.feat/design.fts
 create mode 100644 fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/cluster_mask_zfstat1.nii.gz
 create mode 100644 fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/design.fts
 create mode 100644 fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/stats/zfstat1.nii.gz

diff --git a/fsl/tests/__init__.py b/fsl/tests/__init__.py
index c1b105dcd..a758db12e 100644
--- a/fsl/tests/__init__.py
+++ b/fsl/tests/__init__.py
@@ -288,7 +288,8 @@ def make_mock_feat_analysis(featdir,
                             copes=True,
                             zstats=True,
                             residuals=True,
-                            clustMasks=True):
+                            clustMasks=True,
+                            zfstats=True):
 
     if xform is None:
         xform = np.eye(4)
@@ -346,6 +347,11 @@ def make_mock_feat_analysis(featdir,
         otherFiles .extend(files)
         otherShapes.extend([shape] * len(files))
 
+    if zfstats:
+        files = glob.glob(op.join(featdir, 'stats', 'zfstat*nii.gz'))
+        otherFiles .extend(files)
+        otherShapes.extend([shape] * len(files))
+
     if residuals:
         files = glob.glob(op.join(featdir, 'stats', 'res4d.nii.gz'))
         otherFiles .extend(files)
diff --git a/fsl/tests/test_featimage.py b/fsl/tests/test_featimage.py
index 370e79736..05f5cf5e3 100644
--- a/fsl/tests/test_featimage.py
+++ b/fsl/tests/test_featimage.py
@@ -88,7 +88,8 @@ def test_FEATImage_attributes():
                     copes=False,
                     zstats=False,
                     residuals=False,
-                    clustMasks=False)
+                    clustMasks=False,
+                    zfstats=False)
             else:
                 featdir = op.join(datadir, featdir)
 
@@ -100,6 +101,7 @@ def test_FEATImage_attributes():
             design   = featdesign.FEATFSFDesign(featdir, settings)
             desmat   = design.getDesign()
             evnames  = [ev.title for ev in design.getEVs()]
+            ftests   = featanalysis.loadFTests(featdir)
             contrastnames, contrasts = featanalysis.loadContrasts(featdir)
 
             assert np.all(np.isclose(fi.shape,         shape))
@@ -115,8 +117,10 @@ def test_FEATImage_attributes():
             assert fi.numEVs()                 == desmat.shape[1]
             assert fi.evNames()                == evnames
             assert fi.numContrasts()           == len(contrasts)
+            assert fi.numFTests()              == len(ftests)
             assert fi.contrastNames()          == contrastnames
             assert fi.contrasts()              == contrasts
+            assert fi.ftests()                 == ftests
             assert np.all(np.isclose(fi.getDesign(), desmat))
 
             assert fi.thresholds() == featanalysis.getThresholds(settings)
@@ -153,9 +157,10 @@ def test_FEATImage_imageAccessors():
             shape4D = shape
             shape   = shape4D[:3]
 
-            fi    = featimage.FEATImage(featdir)
-            nevs  = fi.numEVs()
-            ncons = fi.numContrasts()
+            fi      = featimage.FEATImage(featdir)
+            nevs    = fi.numEVs()
+            ncons   = fi.numContrasts()
+            nftests = fi.numFTests()
 
             # Testing the FEATImage internal cache
             for i in range(2):
@@ -166,6 +171,9 @@ def test_FEATImage_imageAccessors():
                     assert fi.getCOPE(       con).shape == shape
                     assert fi.getZStats(     con).shape == shape
                     assert fi.getClusterMask(con).shape == shape
+                for ft in range(nftests):
+                    assert fi.getZFStats(     ft).shape == shape
+                    assert fi.getFClusterMask(ft).shape == shape
             del fi
             fi = None
 
diff --git a/fsl/tests/testdata/test_feat/1stlevel_3.feat/design.fts b/fsl/tests/testdata/test_feat/1stlevel_3.feat/design.fts
new file mode 100644
index 000000000..b243edb21
--- /dev/null
+++ b/fsl/tests/testdata/test_feat/1stlevel_3.feat/design.fts
@@ -0,0 +1,5 @@
+/NumWaves	2
+/NumContrasts	1
+
+/Matrix
+1 1
diff --git a/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope1.feat/design.fts b/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope1.feat/design.fts
new file mode 100644
index 000000000..129044f64
--- /dev/null
+++ b/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope1.feat/design.fts
@@ -0,0 +1,5 @@
+/NumWaves	1
+/NumContrasts	1
+
+/Matrix
+1
diff --git a/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/cluster_mask_zfstat1.nii.gz b/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/cluster_mask_zfstat1.nii.gz
new file mode 100644
index 000000000..f5bed2405
--- /dev/null
+++ b/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/cluster_mask_zfstat1.nii.gz
@@ -0,0 +1 @@
+./cluster_mask_zfstat1.nii.gz
diff --git a/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/design.fts b/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/design.fts
new file mode 100644
index 000000000..129044f64
--- /dev/null
+++ b/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/design.fts
@@ -0,0 +1,5 @@
+/NumWaves	1
+/NumContrasts	1
+
+/Matrix
+1
diff --git a/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/stats/zfstat1.nii.gz b/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/stats/zfstat1.nii.gz
new file mode 100644
index 000000000..b013ebacb
--- /dev/null
+++ b/fsl/tests/testdata/test_feat/2ndlevel_2.gfeat/cope2.feat/stats/zfstat1.nii.gz
@@ -0,0 +1 @@
+./cope2.feat/stats/zfstat1.nii.gz
-- 
GitLab