diff --git a/nibabel/gifti/gifti.py b/nibabel/gifti/gifti.py index 001724edc9..b423ec48dd 100644 --- a/nibabel/gifti/gifti.py +++ b/nibabel/gifti/gifti.py @@ -678,6 +678,141 @@ def get_arrays_from_intent(self, intent): it = intent_codes.code[intent] return [x for x in self.darrays if x.intent == it] + def agg_data(self, intent_code=None): + """ + Aggregate GIFTI data arrays into an ndarray or tuple of ndarray + + In the general case, the numpy data array is extracted from each ``GiftiDataArray`` + object and returned in a ``tuple``, in the order they are found in the GIFTI image. + + If all ``GiftiDataArray`` s have ``intent`` of 2001 (``NIFTI_INTENT_TIME_SERIES``), + then the data arrays are concatenated as columns, producing a vertex-by-time array. + If an ``intent_code`` is passed, data arrays are filtered by the selected intents, + before being aggregated. + This may be useful for images containing several intents, or ensuring an expected + data type in an image of uncertain provenance. + If ``intent_code`` is a ``tuple``, then a ``tuple`` will be returned with the result of + ``agg_data`` for each element, in order. + This may be useful for ensuring that expected data arrives in a consistent order. + + Parameters + ---------- + intent_code : None, string, integer or tuple of strings or integers, optional + code(s) specifying nifti intent + + Returns + ------- + tuple of ndarrays or ndarray + If the input is a tuple, the returned tuple will match the order. + + Examples + -------- + + Consider a surface GIFTI file: + + >>> import nibabel as nib + >>> from nibabel.testing import test_data + >>> surf_img = nib.load(test_data('gifti', 'ascii.gii')) + + The coordinate data, which is indicated by the ``NIFTI_INTENT_POINTSET`` + intent code, may be retrieved using any of the following equivalent + calls: + + >>> coords = surf_img.agg_data('NIFTI_INTENT_POINTSET') + >>> coords_2 = surf_img.agg_data('pointset') + >>> coords_3 = surf_img.agg_data(1008) # Numeric code for pointset + >>> print(np.array2string(coords, precision=3)) + [[-16.072 -66.188 21.267] + [-16.706 -66.054 21.233] + [-17.614 -65.402 21.071]] + >>> np.array_equal(coords, coords_2) + True + >>> np.array_equal(coords, coords_3) + True + + Similarly, the triangle mesh can be retrieved using various intent + specifiers: + + >>> triangles = surf_img.agg_data('NIFTI_INTENT_TRIANGLE') + >>> triangles_2 = surf_img.agg_data('triangle') + >>> triangles_3 = surf_img.agg_data(1009) # Numeric code for pointset + >>> print(np.array2string(triangles)) + [0 1 2] + >>> np.array_equal(triangles, triangles_2) + True + >>> np.array_equal(triangles, triangles_3) + True + + All arrays can be retrieved as a ``tuple`` by omitting the intent + code: + + >>> coords_4, triangles_4 = surf_img.agg_data() + >>> np.array_equal(coords, coords_4) + True + >>> np.array_equal(triangles, triangles_4) + True + + Finally, a tuple of intent codes may be passed in order to select + the arrays in a specific order: + + >>> triangles_5, coords_5 = surf_img.agg_data(('triangle', 'pointset')) + >>> np.array_equal(triangles, triangles_5) + True + >>> np.array_equal(coords, coords_5) + True + + The following image is a GIFTI file with ten (10) data arrays of the same + size, and with intent code 2001 (``NIFTI_INTENT_TIME_SERIES``): + + >>> func_img = nib.load(test_data('gifti', 'task.func.gii')) + + When aggregating time series data, these arrays are concatenated into + a single, vertex-by-timestep array: + + >>> series = func_img.agg_data() + >>> series.shape + (642, 10) + + In the case of a GIFTI file with unknown data arrays, it may be preferable + to specify the intent code, so that a time series array is always returned: + + >>> series_2 = func_img.agg_data('NIFTI_INTENT_TIME_SERIES') + >>> series_3 = func_img.agg_data('time series') + >>> series_4 = func_img.agg_data(2001) + >>> np.array_equal(series, series_2) + True + >>> np.array_equal(series, series_3) + True + >>> np.array_equal(series, series_4) + True + + Requesting a data array from a GIFTI file with no matching intent codes + will result in an empty tuple: + + >>> surf_img.agg_data('time series') + () + >>> func_img.agg_data('triangle') + () + """ + + # Allow multiple intents to specify the order + # e.g., agg_data(('pointset', 'triangle')) ensures consistent order + + if isinstance(intent_code, tuple): + return tuple(self.agg_data(intent_code=code) for code in intent_code) + + darrays = self.darrays if intent_code is None else self.get_arrays_from_intent(intent_code) + all_data = tuple(da.data for da in darrays) + all_intent = {intent_codes.niistring[da.intent] for da in darrays} + + if all_intent == {'NIFTI_INTENT_TIME_SERIES'}: # stack when the gifti is a timeseries + return np.column_stack(all_data) + + if len(all_data) == 1: + all_data = all_data[0] + + return all_data + @deprecate_with_version( 'getArraysFromIntent method deprecated. ' "Use get_arrays_from_intent instead.", diff --git a/nibabel/gifti/tests/data/task.func.gii b/nibabel/gifti/tests/data/task.func.gii new file mode 100644 index 0000000000..0814a6dd33 --- /dev/null +++ b/nibabel/gifti/tests/data/task.func.gii @@ -0,0 +1,33 @@ + + +UserNamemarkiewiczDateThu Sep 12 08:59:28 2019gifticlib-versiongifti library version 1.09, 28 June, 2010TimeStep0.000000NIFTI_XFORM_UNKNOWNNIFTI_XFORM_UNKNOWN 1.000000 0.000000 0.000000 0.000000 + 0.000000 1.000000 0.000000 0.000000 + 0.000000 0.000000 1.000000 0.000000 + 0.000000 0.000000 0.000000 1.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TimeStep0.000000NIFTI_XFORM_UNKNOWNNIFTI_XFORM_UNKNOWN 1.000000 0.000000 0.000000 0.000000 + 0.000000 1.000000 0.000000 0.000000 + 0.000000 0.000000 1.000000 0.000000 + 0.000000 0.000000 0.000000 1.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TimeStep0.000000NIFTI_XFORM_UNKNOWNNIFTI_XFORM_UNKNOWN 1.000000 0.000000 0.000000 0.000000 + 0.000000 1.000000 0.000000 0.000000 + 0.000000 0.000000 1.000000 0.000000 + 0.000000 0.000000 0.000000 1.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.000000NIFTI_XFORM_UNKNOWNNIFTI_XFORM_UNKNOWN 1.000000 0.000000 0.000000 0.000000 + 0.000000 1.000000 0.000000 0.000000 + 0.000000 0.000000 1.000000 0.000000 + 0.000000 0.000000 0.000000 1.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TimeStep0.000000NIFTI_XFORM_UNKNOWNNIFTI_XFORM_UNKNOWN 1.000000 0.000000 0.000000 0.000000 + 0.000000 1.000000 0.000000 0.000000 + 0.000000 0.000000 1.000000 0.000000 + 0.000000 0.000000 0.000000 1.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TimeStep0.000000NIFTI_XFORM_UNKNOWNNIFTI_XFORM_UNKNOWN 1.000000 0.000000 0.000000 0.000000 + 0.000000 1.000000 0.000000 0.000000 + 0.000000 0.000000 1.000000 0.000000 + 0.000000 0.000000 0.000000 1.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TimeStep0.000000NIFTI_XFORM_UNKNOWNNIFTI_XFORM_UNKNOWN 1.000000 0.000000 0.000000 0.000000 + 0.000000 1.000000 0.000000 0.000000 + 0.000000 0.000000 1.000000 0.000000 + 0.000000 0.000000 0.000000 1.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TimeStep0.000000NIFTI_XFORM_UNKNOWNNIFTI_XFORM_UNKNOWN 1.000000 0.000000 0.000000 0.000000 + 0.000000 1.000000 0.000000 0.000000 + 0.000000 0.000000 1.000000 0.000000 + 0.000000 0.000000 0.000000 1.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TimeStep0.000000NIFTI_XFORM_UNKNOWNNIFTI_XFORM_UNKNOWN 1.000000 0.000000 0.000000 0.000000 + 0.000000 1.000000 0.000000 0.000000 + 0.000000 0.000000 1.000000 0.000000 + 0.000000 0.000000 0.000000 1.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TimeStep0.000000NIFTI_XFORM_UNKNOWNNIFTI_XFORM_UNKNOWN 1.000000 0.000000 0.000000 0.000000 + 0.000000 1.000000 0.000000 0.000000 + 0.000000 0.000000 1.000000 0.000000 + 0.000000 0.000000 0.000000 1.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 \ No newline at end of file diff --git a/nibabel/gifti/tests/test_gifti.py b/nibabel/gifti/tests/test_gifti.py index e7bc5f0a16..167e56d6cf 100644 --- a/nibabel/gifti/tests/test_gifti.py +++ b/nibabel/gifti/tests/test_gifti.py @@ -17,12 +17,40 @@ from numpy.testing import (assert_array_almost_equal, assert_array_equal) from nose.tools import (assert_true, assert_false, assert_equal, assert_raises) -from nibabel.testing import clear_and_catch_warnings +from nibabel.testing import clear_and_catch_warnings, test_data from .test_parse_gifti_fast import (DATA_FILE1, DATA_FILE2, DATA_FILE3, DATA_FILE4, DATA_FILE5, DATA_FILE6) import itertools +def test_agg_data(): + surf_gii_img = nib.load(test_data('gifti', 'ascii.gii')) + func_gii_img = nib.load(test_data('gifti', 'task.func.gii')) + shape_gii_img = nib.load(test_data('gifti', 'rh.shape.curv.gii')) + # add timeseries data with intent code ``none`` + + point_data = surf_gii_img.get_arrays_from_intent('pointset')[0].data + triangle_data = surf_gii_img.get_arrays_from_intent('triangle')[0].data + func_da = func_gii_img.get_arrays_from_intent('time series') + func_data = np.column_stack(tuple(da.data for da in func_da)) + shape_data = shape_gii_img.get_arrays_from_intent('shape')[0].data + + assert_equal(surf_gii_img.agg_data(), (point_data, triangle_data)) + assert_array_equal(func_gii_img.agg_data(), func_data) + assert_array_equal(shape_gii_img.agg_data(), shape_data) + + assert_array_equal(surf_gii_img.agg_data('pointset'), point_data) + assert_array_equal(surf_gii_img.agg_data('triangle'), triangle_data) + assert_array_equal(func_gii_img.agg_data('time series'), func_data) + assert_array_equal(shape_gii_img.agg_data('shape'), shape_data) + + assert_equal(surf_gii_img.agg_data('time series'), ()) + assert_equal(func_gii_img.agg_data('triangle'), ()) + assert_equal(shape_gii_img.agg_data('pointset'), ()) + + assert_equal(surf_gii_img.agg_data(('pointset', 'triangle')), (point_data, triangle_data)) + assert_equal(surf_gii_img.agg_data(('triangle', 'pointset')), (triangle_data, point_data)) + def test_gifti_image(): # Check that we're not modifying the default empty list in the default # arguments. diff --git a/nibabel/testing/__init__.py b/nibabel/testing/__init__.py index 010e4d0ad1..fbd1128589 100644 --- a/nibabel/testing/__init__.py +++ b/nibabel/testing/__init__.py @@ -12,6 +12,7 @@ import os import sys import warnings +from pkg_resources import resource_filename from os.path import dirname, abspath, join as pjoin import numpy as np @@ -31,8 +32,23 @@ from itertools import zip_longest + +def test_data(subdir=None, fname=None): + if subdir is None: + resource = os.path.join('tests', 'data') + elif subdir in ('gifti', 'nicom', 'externals'): + resource = os.path.join(subdir, 'tests', 'data') + else: + raise ValueError("Unknown test data directory: %s" % subdir) + + if fname is not None: + resource = os.path.join(resource, fname) + + return resource_filename('nibabel', resource) + + # set path to example data -data_path = abspath(pjoin(dirname(__file__), '..', 'tests', 'data')) +data_path = test_data() from .np_features import memmap_after_ufunc diff --git a/nibabel/tests/test_testing.py b/nibabel/tests/test_testing.py index f770ac4b0e..e9f2d079ea 100644 --- a/nibabel/tests/test_testing.py +++ b/nibabel/tests/test_testing.py @@ -2,15 +2,15 @@ """ import sys +import os import warnings import numpy as np -from nose.tools import assert_equal -from nose.tools import assert_raises +from nose.tools import assert_equal, assert_true, assert_false, assert_raises from ..testing import (error_warnings, suppress_warnings, clear_and_catch_warnings, assert_allclose_safely, - get_fresh_mod, assert_re_in) + get_fresh_mod, assert_re_in, test_data, data_path) def test_assert_allclose_safely(): @@ -150,3 +150,26 @@ def test_assert_re_in(): # Shouldn't "match" the empty list assert_raises(AssertionError, assert_re_in, "", []) + + +def test_test_data(): + assert_equal(test_data(), data_path) + assert_equal(test_data(), + os.path.abspath(os.path.join(os.path.dirname(__file__), + '..', 'tests', 'data'))) + for subdir in ('nicom', 'gifti', 'externals'): + assert_equal(test_data(subdir), os.path.join(data_path[:-10], subdir, 'tests', 'data')) + assert_true(os.path.exists(test_data(subdir))) + assert_false(os.path.exists(test_data(subdir, 'doesnotexist'))) + + for subdir in ('freesurfer', 'doesnotexist'): + with assert_raises(ValueError): + test_data(subdir) + + assert_false(os.path.exists(test_data(None, 'doesnotexist'))) + + for subdir, fname in [('gifti', 'ascii.gii'), + ('nicom', '0.dcm'), + ('externals', 'example_1.nc'), + (None, 'empty.tck')]: + assert_true(os.path.exists(test_data(subdir, fname)))