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