def test_matrix(): m = ci.Cifti2Matrix() assert_raises(TypeError, m, setattr, 'metadata', ci.Cifti2Parcel()) assert_raises(TypeError, m.__setitem__, 0, ci.Cifti2Parcel()) assert_raises(TypeError, m.insert, 0, ci.Cifti2Parcel()) mim_none = ci.Cifti2MatrixIndicesMap(None, 'CIFTI_INDEX_TYPE_LABELS') mim_0 = ci.Cifti2MatrixIndicesMap(0, 'CIFTI_INDEX_TYPE_LABELS') mim_1 = ci.Cifti2MatrixIndicesMap(1, 'CIFTI_INDEX_TYPE_LABELS') mim_01 = ci.Cifti2MatrixIndicesMap([0, 1], 'CIFTI_INDEX_TYPE_LABELS') assert_raises(ci.Cifti2HeaderError, m.insert, 0, mim_none) assert_equal(m.mapped_indices, []) h = ci.Cifti2Header(matrix=m) assert_equal(m.mapped_indices, []) m.insert(0, mim_0) assert_equal(h.mapped_indices, [0]) assert_equal(h.number_of_mapped_indices, 1) assert_raises(ci.Cifti2HeaderError, m.insert, 0, mim_0) assert_raises(ci.Cifti2HeaderError, m.insert, 0, mim_01) m[0] = mim_1 assert_equal(list(m.mapped_indices), [1]) m.insert(0, mim_0) assert_equal(list(sorted(m.mapped_indices)), [0, 1]) assert_equal(h.number_of_mapped_indices, 2) assert_equal(h.get_index_map(0), mim_0) assert_equal(h.get_index_map(1), mim_1) assert_raises(ci.Cifti2HeaderError, h.get_index_map, 2)
def test_cifti2_parcel(): pl = ci.Cifti2Parcel() assert_raises(ci.Cifti2HeaderError, pl.to_xml) assert_raises(TypeError, pl.append_cifti_vertices, None) assert_raises(ValueError, ci.Cifti2Parcel, **{'vertices': [1, 2, 3]}) pl = ci.Cifti2Parcel(name='region', voxel_indices_ijk=ci.Cifti2VoxelIndicesIJK([[1, 2, 3]]), vertices=[ci.Cifti2Vertices([0, 1, 2])]) pl.pop_cifti2_vertices(0) assert_equal(len(pl.vertices), 0) assert_equal( pl.to_xml().decode('utf-8'), '<Parcel Name="region"><VoxelIndicesIJK>1 2 3</VoxelIndicesIJK></Parcel>' )
def test_matrixindicesmap(): mim = ci.Cifti2MatrixIndicesMap(0, 'CIFTI_INDEX_TYPE_LABELS') volume = ci.Cifti2Volume() volume2 = ci.Cifti2Volume() parcel = ci.Cifti2Parcel() assert_is_none(mim.volume) mim.append(volume) mim.append(parcel) assert_equal(mim.volume, volume) assert_raises(ci.Cifti2HeaderError, mim.insert, 0, volume) assert_raises(ci.Cifti2HeaderError, mim.__setitem__, 1, volume) mim[0] = volume2 assert_equal(mim.volume, volume2) del mim.volume assert_is_none(mim.volume) assert_raises(ValueError, delattr, mim, 'volume') mim.volume = volume assert_equal(mim.volume, volume) mim.volume = volume2 assert_equal(mim.volume, volume2) assert_raises(ValueError, setattr, mim, 'volume', parcel)
def to_mapping(self, dim): """ Converts the parcels to a MatrixIndicesMap for storage in CIFTI format Parameters ---------- dim : int which dimension of the CIFTI vector/matrix is described by this dataset (zero-based) Returns ------- cifti2.Cifti2MatrixIndicesMap """ mim = cifti2.Cifti2MatrixIndicesMap([dim], 'CIFTI_INDEX_TYPE_PARCELS') if self.affine is not None: affine = cifti2.Cifti2TransformationMatrixVoxelIndicesIJKtoXYZ(-3, matrix=self.affine) mim.volume = cifti2.Cifti2Volume(self.volume_shape, affine) for name, nvertex in self.nvertices.items(): mim.append(cifti2.Cifti2Surface(name, nvertex)) for name, voxels, vertices in self.arr: cifti_voxels = cifti2.Cifti2VoxelIndicesIJK(voxels) element = cifti2.Cifti2Parcel(name, cifti_voxels) for name, idx_vertices in vertices.items(): element.vertices.append(cifti2.Cifti2Vertices(name, idx_vertices)) mim.append(element) return mim
def test_matrixindicesmap(): mim = ci.Cifti2MatrixIndicesMap(0, 'CIFTI_INDEX_TYPE_LABELS') volume = ci.Cifti2Volume() volume2 = ci.Cifti2Volume() parcel = ci.Cifti2Parcel() assert mim.volume is None mim.append(volume) mim.append(parcel) assert mim.volume == volume with pytest.raises(ci.Cifti2HeaderError): mim.insert(0, volume) with pytest.raises(ci.Cifti2HeaderError): mim[1] = volume mim[0] = volume2 assert mim.volume == volume2 del mim.volume assert mim.volume is None with pytest.raises(ValueError): del mim.volume mim.volume = volume assert mim.volume == volume mim.volume = volume2 assert mim.volume == volume2 with pytest.raises(ValueError): mim.volume = parcel
def test_matrix(): m = ci.Cifti2Matrix() with pytest.raises(ValueError): m.metadata = ci.Cifti2Parcel() with pytest.raises(TypeError): m[0] = ci.Cifti2Parcel() with pytest.raises(TypeError): m.insert(0, ci.Cifti2Parcel()) mim_none = ci.Cifti2MatrixIndicesMap(None, 'CIFTI_INDEX_TYPE_LABELS') mim_0 = ci.Cifti2MatrixIndicesMap(0, 'CIFTI_INDEX_TYPE_LABELS') mim_1 = ci.Cifti2MatrixIndicesMap(1, 'CIFTI_INDEX_TYPE_LABELS') mim_01 = ci.Cifti2MatrixIndicesMap([0, 1], 'CIFTI_INDEX_TYPE_LABELS') with pytest.raises(ci.Cifti2HeaderError): m.insert(0, mim_none) assert m.mapped_indices == [] h = ci.Cifti2Header(matrix=m) assert m.mapped_indices == [] m.insert(0, mim_0) assert h.mapped_indices == [0] assert h.number_of_mapped_indices == 1 with pytest.raises(ci.Cifti2HeaderError): m.insert(0, mim_0) with pytest.raises(ci.Cifti2HeaderError): m.insert(0, mim_01) m[0] = mim_1 assert list(m.mapped_indices) == [1] m.insert(0, mim_0) assert list(sorted(m.mapped_indices)) == [0, 1] assert h.number_of_mapped_indices == 2 assert h.get_index_map(0) == mim_0 assert h.get_index_map(1) == mim_1 with pytest.raises(ci.Cifti2HeaderError): h.get_index_map(2)
def test_cifti2_parcel(): pl = ci.Cifti2Parcel() with pytest.raises(ci.Cifti2HeaderError): pl.to_xml() with pytest.raises(TypeError): pl.append_cifti_vertices(None) with pytest.raises(ValueError): ci.Cifti2Parcel(vertices=[1, 2, 3]) pl = ci.Cifti2Parcel(name='region', voxel_indices_ijk=ci.Cifti2VoxelIndicesIJK([[1, 2, 3]]), vertices=[ci.Cifti2Vertices([0, 1, 2])]) pl.pop_cifti2_vertices(0) assert len(pl.vertices) == 0 assert pl.to_xml().decode( 'utf-8' ) == '<Parcel Name="region"><VoxelIndicesIJK>1 2 3</VoxelIndicesIJK></Parcel>'
def create_parcel_map(applies_to_matrix_dimension): mapping = ci.Cifti2MatrixIndicesMap(applies_to_matrix_dimension, 'CIFTI_INDEX_TYPE_PARCELS') for name, elements in parcels: surfaces = [] volume = None for element in elements: if isinstance(element[0], str): surfaces.append(ci.Cifti2Vertices(element[0], element[1])) else: volume = ci.Cifti2VoxelIndicesIJK(element) mapping.append(ci.Cifti2Parcel(name, volume, surfaces)) mapping.extend([ ci.Cifti2Surface('CIFTI_STRUCTURE_CORTEX_%s' % orientation, number_of_vertices) for orientation in ['LEFT', 'RIGHT'] ]) mapping.volume = ci.Cifti2Volume( dimensions, ci.Cifti2TransformationMatrixVoxelIndicesIJKtoXYZ(-3, affine)) return mapping
def create_parcel(info): """Create a list of Cifti2Parcels from a list of ParcelInfo""" allowed_brain_structures = (Structure.CORTEX_LEFT, Structure.CORTEX_RIGHT, Structure.CEREBELLUM) surfaces = [] volume = None has_surfaces = info.surfaces is not None has_ijk = info.voxel_ijk is not None if not has_vertices and not has_ijk: raise Exception if has_vertices: for surface in info.surfaces: if info.brain_structure not in allowed_brain_structure: raise Exception surfaces.append( ci.Cifti2Vertices(surface.brain_structure, surface.indices)) if has_indices: volume = ci.Cifti2VoxelIndicesIJK(info.voxel_ijk) return ci.Cifti2Parcel(info.name, volume, surfaces)