diff --git a/tests/__init__.py b/tests/__init__.py index f44dfea33c88b75d8e6a875b43edbef3e3e74e0b..94c97dc5f33fb3ba4da16a057d324404d5d021f9 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -94,7 +94,7 @@ class CaptureStdout(object): -def testdir(contents=None): +def testdir(contents=None, suffix=None): """Returnsa context manager which creates, changes to, and returns a temporary directory, and then deletes it on exit. """ @@ -109,7 +109,7 @@ def testdir(contents=None): def __enter__(self): - self.testdir = tempfile.mkdtemp() + self.testdir = tempfile.mkdtemp(suffix=suffix) self.prevdir = os.getcwd() os.chdir(self.testdir) @@ -194,21 +194,56 @@ def random_voxels(shape, nvoxels=1): return randVoxels -def make_random_image(filename, dims=(10, 10, 10), xform=None): - """Creates a NIFTI1 image with random data, saves and - returns it. +def make_random_image(filename=None, + dims=(10, 10, 10), + xform=None, + imgtype=1, + pixdims=None, + dtype=np.float32): + """Convenience function which makes an image containing random data. + Saves and returns the nibabel object. + + imgtype == 0: ANALYZE + imgtype == 1: NIFTI1 + imgtype == 2: NIFTI2 """ + if imgtype == 0: hdr = nib.AnalyzeHeader() + elif imgtype == 1: hdr = nib.Nifti1Header() + elif imgtype == 2: hdr = nib.Nifti2Header() + + if pixdims is None: + pixdims = [1] * len(dims) + + pixdims = pixdims[:len(dims)] + zooms = [abs(p) for p in pixdims] + + hdr.set_data_dtype(dtype) + hdr.set_data_shape(dims) + hdr.set_zooms(zooms) + if xform is None: xform = np.eye(4) + for i, p in enumerate(pixdims[:3]): + xform[i, i] = p - data = np.array(np.random.random(dims) * 100, dtype=np.float32) - img = nib.Nifti1Image(data, xform) + data = np.array(np.random.random(dims) * 100, dtype=dtype) - nib.save(img, filename) + if imgtype == 0: img = nib.AnalyzeImage(data, xform, hdr) + elif imgtype == 1: img = nib.Nifti1Image( data, xform, hdr) + elif imgtype == 2: img = nib.Nifti2Image( data, xform, hdr) + + if filename is not None: + + if op.splitext(filename)[1] == '': + if imgtype == 0: filename = '{}.img'.format(filename) + else: filename = '{}.nii'.format(filename) + + nib.save(img, filename) return img + def make_mock_feat_analysis(featdir, testdir, shape4D,