diff --git a/tests/test_extract_noise.py b/tests/test_extract_noise.py new file mode 100644 index 0000000000000000000000000000000000000000..768b98a915cb1779d34313819fac2edbbecb7cb9 --- /dev/null +++ b/tests/test_extract_noise.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# +# test_extract_noise.py - +# +# Author: Paul McCarthy <pauldmccarthy@gmail.com> +# + + +import numpy as np + +import fsl.utils.tempdir as tempdir +import fsl.scripts.extract_noise as extn + + +def test_genComponentIndexList(): + + with tempdir.tempdir(): + + # sequence of 1-indexed integers/file paths + # both potentially containing larger than + # the actual number of components + icomps = [1, 5, 28, 12, 42, 54] + fcomps1 = [1, 4, 6, 3, 7] + fcomps2 = [12, 42, 31, 1, 4, 8] + + with open('comps1.txt', 'wt') as f: + f.write(','.join([str(l) for l in fcomps1])) + with open('comps2.txt', 'wt') as f: + f.write(','.join([str(l) for l in fcomps2])) + + ncomps = 60 + comps = icomps + ['comps1.txt', 'comps2.txt'] + expcomps = list(sorted(set(icomps + fcomps1 + fcomps2))) + expcomps = [c - 1 for c in expcomps] + + assert extn.genComponentIndexList(comps, ncomps) == expcomps + + ncomps = 40 + comps = icomps + ['comps1.txt', 'comps2.txt'] + [0, -1] + expcomps = list(sorted(set(icomps + fcomps1 + fcomps2))) + expcomps = [c - 1 for c in expcomps if c <= ncomps] + + assert extn.genComponentIndexList(comps, ncomps) == expcomps + + +def test_loadConfoundFiles(): + with tempdir.tempdir(): + + npts = 50 + confs = [ + np.random.randint(1, 100, (50, 10)), + np.random.randint(1, 100, (50, 1)), + np.random.randint(1, 100, (50, 5)), + np.random.randint(1, 100, (40, 10)), + np.random.randint(1, 100, (60, 10))] + + expected = np.empty((50, 36), dtype=np.float64) + expected[:, :] = np.nan + expected[:, :10] = confs[0] + expected[:, 10:11] = confs[1] + expected[:, 11:16] = confs[2] + expected[:40, 16:26] = confs[3] + expected[:, 26:36] = confs[4][:50, :] + + conffiles = [] + for i, c in enumerate(confs): + fname = 'conf{}.txt'.format(i) + conffiles.append(fname) + np.savetxt(fname, c) + + result = extn.loadConfoundFiles(conffiles, npts) + amask = ~np.isnan(expected) + + assert np.all(~np.isnan(result) == amask) + assert np.all(result[amask] == expected[amask]) + assert np.all(result[amask] == expected[amask])