Example #1
0
    def write(self, surface_obj, file_path):
        image_metadata = GiftiMetaData().from_dict(
            surface_obj.generic_metadata)
        vertices_metadata = GiftiMetaData().from_dict(
            surface_obj.vertices_metadata)
        triangles_metadata = GiftiMetaData().from_dict(
            surface_obj.triangles_metadata)

        gifti_image = GiftiImage()
        gifti_image.set_metadata(image_metadata)

        data = GiftiDataArray(surface_obj.vertices,
                              datatype='NIFTI_TYPE_FLOAT32',
                              intent='NIFTI_INTENT_POINTSET')
        data.meta = vertices_metadata
        data.coordsys = surface_obj.vertices_coord_system
        gifti_image.add_gifti_data_array(data)

        data = GiftiDataArray(surface_obj.triangles,
                              datatype='NIFTI_TYPE_INT32',
                              intent='NIFTI_INTENT_TRIANGLE')
        data.meta = triangles_metadata
        data.coordsys = None
        gifti_image.add_gifti_data_array(data)

        nibabel.save(gifti_image, file_path)
Example #2
0
def test_metadata():
    nvpair = GiftiNVPairs('key', 'value')
    md = GiftiMetaData(nvpair=nvpair)
    assert_equal(md.data[0].name, 'key')
    assert_equal(md.data[0].value, 'value')
    # Test deprecation
    with clear_and_catch_warnings() as w:
        warnings.filterwarnings('always', category=DeprecationWarning)
        assert_equal(md.get_metadata(), dict(key='value'))
        assert_equal(len(w), 1)
        assert_equal(len(GiftiDataArray().get_metadata()), 0)
        assert_equal(len(w), 2)
Example #3
0
def test_metadata():
    nvpair = GiftiNVPairs('key', 'value')
    md = GiftiMetaData(nvpair=nvpair)
    assert_equal(md.data[0].name, 'key')
    assert_equal(md.data[0].value, 'value')
    # Test deprecation
    with clear_and_catch_warnings() as w:
        warnings.filterwarnings('always', category=DeprecationWarning)
        assert_equal(md.get_metadata(), dict(key='value'))
        assert_equal(len(w), 1)
        assert_equal(len(GiftiDataArray().get_metadata()), 0)
        assert_equal(len(w), 2)
Example #4
0
def test_metadata():
    # Test deprecation
    with clear_and_catch_warnings() as w:
        warnings.filterwarnings('once', category=DeprecationWarning)
        assert_equal(len(GiftiDataArray().get_metadata()), 0)

    # Test deprecation
    with clear_and_catch_warnings() as w:
        warnings.filterwarnings('once', category=DeprecationWarning)
        assert_equal(len(GiftiMetaData().get_metadata()), 0)
Example #5
0
def test_dataarray_init():
    # Test non-default dataarray initialization
    gda = GiftiDataArray  # shortcut
    assert_equal(gda(None).data, None)
    arr = np.arange(12, dtype=np.float32).reshape((3, 4))
    assert_array_equal(gda(arr).data, arr)
    # Intents
    assert_raises(KeyError, gda, intent=1)  # Invalid code
    assert_raises(KeyError, gda, intent='not an intent')  # Invalid string
    assert_equal(gda(intent=2).intent, 2)
    assert_equal(gda(intent='correlation').intent, 2)
    assert_equal(gda(intent='NIFTI_INTENT_CORREL').intent, 2)
    # Datatype
    assert_equal(gda(datatype=2).datatype, 2)
    assert_equal(gda(datatype='uint8').datatype, 2)
    assert_raises(KeyError, gda, datatype='not_datatype')
    # Float32 datatype comes from array if datatype not set
    assert_equal(gda(arr).datatype, 16)
    # Can be overriden by init
    assert_equal(gda(arr, datatype='uint8').datatype, 2)
    # Encoding
    assert_equal(gda(encoding=1).encoding, 1)
    assert_equal(gda(encoding='ASCII').encoding, 1)
    assert_equal(gda(encoding='GIFTI_ENCODING_ASCII').encoding, 1)
    assert_raises(KeyError, gda, encoding='not an encoding')
    # Endian
    assert_equal(gda(endian=1).endian, 1)
    assert_equal(gda(endian='big').endian, 1)
    assert_equal(gda(endian='GIFTI_ENDIAN_BIG').endian, 1)
    assert_raises(KeyError, gda, endian='not endian code')
    # CoordSys
    aff = np.diag([2, 3, 4, 1])
    cs = GiftiCoordSystem(1, 2, aff)
    da = gda(coordsys=cs)
    assert_equal(da.coordsys.dataspace, 1)
    assert_equal(da.coordsys.xformspace, 2)
    assert_array_equal(da.coordsys.xform, aff)
    # Ordering
    assert_equal(gda(ordering=2).ind_ord, 2)
    assert_equal(gda(ordering='F').ind_ord, 2)
    assert_equal(gda(ordering='ColumnMajorOrder').ind_ord, 2)
    assert_raises(KeyError, gda, ordering='not an ordering')
    # metadata
    meta_dict = dict(one=1, two=2)
    assert_equal(
        gda(meta=GiftiMetaData.from_dict(meta_dict)).meta.metadata, meta_dict)
    assert_equal(gda(meta=meta_dict).meta.metadata, meta_dict)
    assert_equal(gda(meta=None).meta.metadata, {})
    # ext_fname and ext_offset
    assert_equal(gda(ext_fname='foo').ext_fname, 'foo')
    assert_equal(gda(ext_offset=12).ext_offset, 12)
Example #6
0
def test_dataarray_init():
    # Test non-default dataarray initialization
    gda = GiftiDataArray  # shortcut
    assert_equal(gda(None).data, None)
    arr = np.arange(12, dtype=np.float32).reshape((3, 4))
    assert_array_equal(gda(arr).data, arr)
    # Intents
    assert_raises(KeyError, gda, intent=1)  # Invalid code
    assert_raises(KeyError, gda, intent='not an intent')  # Invalid string
    assert_equal(gda(intent=2).intent, 2)
    assert_equal(gda(intent='correlation').intent, 2)
    assert_equal(gda(intent='NIFTI_INTENT_CORREL').intent, 2)
    # Datatype
    assert_equal(gda(datatype=2).datatype, 2)
    assert_equal(gda(datatype='uint8').datatype, 2)
    assert_raises(KeyError, gda, datatype='not_datatype')
    # Float32 datatype comes from array if datatype not set
    assert_equal(gda(arr).datatype, 16)
    # Can be overriden by init
    assert_equal(gda(arr, datatype='uint8').datatype, 2)
    # Encoding
    assert_equal(gda(encoding=1).encoding, 1)
    assert_equal(gda(encoding='ASCII').encoding, 1)
    assert_equal(gda(encoding='GIFTI_ENCODING_ASCII').encoding, 1)
    assert_raises(KeyError, gda, encoding='not an encoding')
    # Endian
    assert_equal(gda(endian=1).endian, 1)
    assert_equal(gda(endian='big').endian, 1)
    assert_equal(gda(endian='GIFTI_ENDIAN_BIG').endian, 1)
    assert_raises(KeyError, gda, endian='not endian code')
    # CoordSys
    aff = np.diag([2, 3, 4, 1])
    cs = GiftiCoordSystem(1, 2, aff)
    da = gda(coordsys=cs)
    assert_equal(da.coordsys.dataspace, 1)
    assert_equal(da.coordsys.xformspace, 2)
    assert_array_equal(da.coordsys.xform, aff)
    # Ordering
    assert_equal(gda(ordering=2).ind_ord, 2)
    assert_equal(gda(ordering='F').ind_ord, 2)
    assert_equal(gda(ordering='ColumnMajorOrder').ind_ord, 2)
    assert_raises(KeyError, gda, ordering='not an ordering')
    # metadata
    meta_dict=dict(one=1, two=2)
    assert_equal(gda(meta=GiftiMetaData.from_dict(meta_dict)).meta.metadata,
                 meta_dict)
    assert_equal(gda(meta=meta_dict).meta.metadata, meta_dict)
    assert_equal(gda(meta=None).meta.metadata, {})
    # ext_fname and ext_offset
    assert_equal(gda(ext_fname='foo').ext_fname, 'foo')
    assert_equal(gda(ext_offset=12).ext_offset, 12)
Example #7
0
    def write_gifti(self, surface, surface_path):
        gifti_image = GiftiImage()

        data_array = [0 for _ in xrange(2)]
        data_array[0] = surface.vertices
        data_array[1] = surface.triangles

        image_metadata = GiftiMetaData().from_dict(surface.image_metadata)
        vertices_metadata = GiftiMetaData().from_dict(surface.vertices_metadata)
        triangles_metadata = GiftiMetaData().from_dict(surface.triangles_metadata)

        # TODO We currently write metadata of the old surface
        gifti_image.set_metadata(image_metadata)

        data = GiftiDataArray(data_array[0], datatype='NIFTI_TYPE_FLOAT32', intent='NIFTI_INTENT_POINTSET')
        data.meta = vertices_metadata
        data.coordsys = surface.vertices_coord_system
        gifti_image.add_gifti_data_array(data)
        data = GiftiDataArray(data_array[1], datatype='NIFTI_TYPE_INT32', intent='NIFTI_INTENT_TRIANGLE')
        data.meta = triangles_metadata
        data.coordsys = None
        gifti_image.add_gifti_data_array(data)

        nibabel.save(gifti_image, surface_path)
Example #8
0
def ply2gii(in_file, metadata, out_file=None):
    """Convert from ply to GIfTI"""
    from pathlib import Path
    from numpy import eye
    from nibabel.gifti import (
        GiftiMetaData,
        GiftiCoordSystem,
        GiftiImage,
        GiftiDataArray,
    )
    from pyntcloud import PyntCloud

    in_file = Path(in_file)
    surf = PyntCloud.from_file(str(in_file))

    # Update centroid metadata
    metadata.update(
        zip(
            ("SurfaceCenterX", "SurfaceCenterY", "SurfaceCenterZ"),
            ["%.4f" % c for c in surf.centroid],
        ))

    # Prepare data arrays
    da = (
        GiftiDataArray(
            data=surf.xyz.astype("float32"),
            datatype="NIFTI_TYPE_FLOAT32",
            intent="NIFTI_INTENT_POINTSET",
            meta=GiftiMetaData.from_dict(metadata),
            coordsys=GiftiCoordSystem(xform=eye(4), xformspace=3),
        ),
        GiftiDataArray(
            data=surf.mesh.values,
            datatype="NIFTI_TYPE_INT32",
            intent="NIFTI_INTENT_TRIANGLE",
            coordsys=None,
        ),
    )
    surfgii = GiftiImage(darrays=da)

    if out_file is None:
        out_file = fname_presuffix(in_file.name,
                                   suffix=".gii",
                                   use_ext=False,
                                   newpath=str(Path.cwd()))

    surfgii.to_filename(str(out_file))
    return out_file
Example #9
0
def ply2gii(in_file, metadata, out_file=None):
    """Convert from ply to GIfTI"""
    from pathlib import Path
    from numpy import eye
    from nibabel.gifti import (
        GiftiMetaData, GiftiCoordSystem, GiftiImage, GiftiDataArray,
    )
    from pyntcloud import PyntCloud

    in_file = Path(in_file)
    surf = PyntCloud.from_file(str(in_file))

    # Update centroid metadata
    metadata.update(
        zip(('SurfaceCenterX', 'SurfaceCenterY', 'SurfaceCenterZ'),
            ['%.4f' % c for c in surf.centroid])
    )

    # Prepare data arrays
    da = (
        GiftiDataArray(
            data=surf.xyz.astype('float32'),
            datatype='NIFTI_TYPE_FLOAT32',
            intent='NIFTI_INTENT_POINTSET',
            meta=GiftiMetaData.from_dict(metadata),
            coordsys=GiftiCoordSystem(xform=eye(4), xformspace=3)),
        GiftiDataArray(
            data=surf.mesh.values,
            datatype='NIFTI_TYPE_INT32',
            intent='NIFTI_INTENT_TRIANGLE',
            coordsys=None))
    surfgii = GiftiImage(darrays=da)

    if out_file is None:
        out_file = fname_presuffix(
            in_file.name, suffix='.gii', use_ext=False, newpath=str(Path.cwd()))

    surfgii.to_filename(str(out_file))
    return out_file