Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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>'
    )
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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>'
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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)