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)
def write_mesh(cor, tri, filename): from nibabel.gifti import GiftiImage, GiftiDataArray nimg = GiftiImage() intent = 'NIFTI_INTENT_POINTSET' nimg.add_gifti_data_array(GiftiDataArray.from_array(cor,intent)) intent = 'NIFTI_INTENT_TRIANGLE' nimg.add_gifti_data_array(GiftiDataArray.from_array(tri,intent)) gifti.write(nimg, filename)
def write_mesh(cor, tri, filename): from nibabel.gifti import GiftiImage, GiftiDataArray nimg = GiftiImage() intent = 'NIFTI_INTENT_POINTSET' nimg.add_gifti_data_array(GiftiDataArray.from_array(cor, intent)) intent = 'NIFTI_INTENT_TRIANGLE' nimg.add_gifti_data_array(GiftiDataArray.from_array(tri, intent)) gifti.write(nimg, filename)
def test_data_array_round_trip(): # Test valid XML generated from new in-memory array # See: https://github.com/nipy/nibabel/issues/469 verts = np.zeros((4, 3), np.float32) verts[0, 0] = 10.5 verts[1, 1] = 20.5 verts[2, 2] = 30.5 vertices = GiftiDataArray(verts) img = GiftiImage() img.add_gifti_data_array(vertices) bio = BytesIO() fmap = dict(image=FileHolder(fileobj=bio)) bio.write(img.to_xml()) bio.seek(0) gio = GiftiImage.from_file_map(fmap) vertices = gio.darrays[0].data assert_array_equal(vertices, verts)
def test_gifti_image(): # Check that we're not modifying the default empty list in the default # arguments. gi = GiftiImage() assert_equal(gi.darrays, []) assert_equal(gi.meta.metadata, {}) assert_equal(gi.labeltable.labels, []) arr = np.zeros((2, 3)) gi.darrays.append(arr) # Now check we didn't overwrite the default arg gi = GiftiImage() assert_equal(gi.darrays, []) # Test darrays / numDA gi = GiftiImage() assert_equal(gi.numDA, 0) # Test from numpy numeric array data = np.random.random((5, )) da = GiftiDataArray(data) gi.add_gifti_data_array(da) assert_equal(gi.numDA, 1) assert_array_equal(gi.darrays[0].data, data) # Test removing gi.remove_gifti_data_array(0) assert_equal(gi.numDA, 0) # Remove from empty gi = GiftiImage() gi.remove_gifti_data_array_by_intent(0) assert_equal(gi.numDA, 0) # Remove one gi = GiftiImage() da = GiftiDataArray(np.zeros((5, )), intent=0) gi.add_gifti_data_array(da) gi.remove_gifti_data_array_by_intent(3) assert_equal(gi.numDA, 1, "data array should exist on 'missed' remove") gi.remove_gifti_data_array_by_intent(da.intent) assert_equal(gi.numDA, 0)
def test_gifti_image(): # Check that we're not modifying the default empty list in the default # arguments. gi = GiftiImage() assert_equal(gi.darrays, []) assert_equal(gi.meta.metadata, {}) assert_equal(gi.labeltable.labels, []) arr = np.zeros((2, 3)) gi.darrays.append(arr) # Now check we didn't overwrite the default arg gi = GiftiImage() assert_equal(gi.darrays, []) # Test darrays / numDA gi = GiftiImage() assert_equal(gi.numDA, 0) # Test from numpy numeric array data = np.random.random((5,)) da = GiftiDataArray(data) gi.add_gifti_data_array(da) assert_equal(gi.numDA, 1) assert_array_equal(gi.darrays[0].data, data) # Test removing gi.remove_gifti_data_array(0) assert_equal(gi.numDA, 0) # Remove from empty gi = GiftiImage() gi.remove_gifti_data_array_by_intent(0) assert_equal(gi.numDA, 0) # Remove one gi = GiftiImage() da = GiftiDataArray(np.zeros((5,)), intent=0) gi.add_gifti_data_array(da) gi.remove_gifti_data_array_by_intent(3) assert_equal(gi.numDA, 1, "data array should exist on 'missed' remove") gi.remove_gifti_data_array_by_intent(da.intent) assert_equal(gi.numDA, 0)
def extract_sub_mesh_with_files(input_mesh, center_node, radius, output_mesh=None): from nibabel import gifti from nibabel.gifti import GiftiImage, GiftiDataArray from pyhrf.tools._io import read_mesh cor, tri, coord_sys = read_mesh(input_mesh) sub_cor, sub_tri = extract_sub_mesh(cor, tri, center_node, radius) #nimg = GiftiImage_fromTriangles(sub_cor, sub_tri) nimg = GiftiImage() intent = 'NIFTI_INTENT_POINTSET' nimg.add_gifti_data_array(GiftiDataArray.from_array(sub_cor,intent)) intent = 'NIFTI_INTENT_TRIANGLE' nimg.add_gifti_data_array(GiftiDataArray.from_array(sub_tri,intent)) if output_mesh is None: output_mesh = non_existent_file(add_suffix(input_mesh, '_sub')) pyhrf.verbose(1, 'Saving extracted mesh to %s' %output_mesh) gifti.write(nimg, output_mesh) return sub_cor, sub_tri, coord_sys
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)
def test_gifti_image(): # Check that we're not modifying the default empty list in the default # arguments. gi = GiftiImage() assert_equal(gi.darrays, []) arr = np.zeros((2, 3)) gi.darrays.append(arr) # Now check we didn't overwrite the default arg gi = GiftiImage() assert_equal(gi.darrays, []) # Test darrays / numDA gi = GiftiImage() assert_equal(gi.numDA, 0) da = GiftiDataArray(data='data') gi.add_gifti_data_array(da) assert_equal(gi.numDA, 1) assert_equal(gi.darrays[0].data, 'data') gi.remove_gifti_data_array(0) assert_equal(gi.numDA, 0) # Remove from empty gi = GiftiImage() gi.remove_gifti_data_array_by_intent(0) assert_equal(gi.numDA, 0) # Remove one gi = GiftiImage() da = GiftiDataArray(data='data') gi.add_gifti_data_array(da) gi.remove_gifti_data_array_by_intent(0) assert_equal(gi.numDA, 1) gi.darrays[0].intent = 0 gi.remove_gifti_data_array_by_intent(0) assert_equal(gi.numDA, 0)
def extract_sub_mesh_with_files(input_mesh, center_node, radius, output_mesh=None): from nibabel import gifti from nibabel.gifti import GiftiImage, GiftiDataArray from pyhrf.tools._io import read_mesh cor, tri, coord_sys = read_mesh(input_mesh) sub_cor, sub_tri = extract_sub_mesh(cor, tri, center_node, radius) #nimg = GiftiImage_fromTriangles(sub_cor, sub_tri) nimg = GiftiImage() intent = 'NIFTI_INTENT_POINTSET' nimg.add_gifti_data_array(GiftiDataArray.from_array(sub_cor, intent)) intent = 'NIFTI_INTENT_TRIANGLE' nimg.add_gifti_data_array(GiftiDataArray.from_array(sub_tri, intent)) if output_mesh is None: output_mesh = non_existent_file(add_suffix(input_mesh, '_sub')) logger.info('Saving extracted mesh to %s', output_mesh) gifti.write(nimg, output_mesh) return sub_cor, sub_tri, coord_sys
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)