Something went wrong on our end
Forked from
FSL / fslpy
2425 commits behind the upstream repository.
-
Paul McCarthy authoredPaul McCarthy authored
test_atlases.py 4.07 KiB
#!/usr/bin/env python
#
# test_atlases.py -
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
import os
import os.path as op
import shutil
import tempfile
import numpy as np
import pytest
import fsl.data.atlases as atlases
import fsl.data.image as fslimage
def setup_module():
if os.environ.get('FSLDIR', None) is None:
raise Exception('FSLDIR is not set - atlas tests cannot be run')
def test_registry():
registry = atlases.registry
registry.rescanAtlases()
assert len(registry.listAtlases()) > 0
assert registry.hasAtlas('harvardoxford-cortical')
adesc = registry.getAtlasDescription('harvardoxford-cortical')
assert isinstance(adesc, atlases.AtlasDescription)
with pytest.raises(Exception):
registry.getAtlasDescription('non-existent-atlas')
def test_AtlasDescription():
registry = atlases.registry
registry.rescanAtlases()
tal = registry.getAtlasDescription('talairach')
cort = registry.getAtlasDescription('harvardoxford-cortical')
assert tal.atlasID == 'talairach'
assert tal.name == 'Talairach Daemon Labels'
assert tal.specPath
assert tal.atlasType == 'label'
nimages = len(tal.images)
assert nimages > 0
assert len(tal.summaryImages) > 0
assert len(tal.pixdims) == nimages
assert len(tal.xforms) == nimages
assert len(tal.labels) > 0
for lbl in tal.labels:
lbl.name
lbl.index
lbl.x
lbl.y
lbl.z
assert cort.atlasID == 'harvardoxford-cortical'
assert cort.name == 'Harvard-Oxford Cortical Structural Atlas'
assert cort.specPath
assert cort.atlasType == 'probabilistic'
nimages = len(cort.images)
assert nimages > 0
assert len(cort.summaryImages) > 0
assert len(cort.pixdims) == nimages
assert len(cort.xforms) == nimages
assert len(cort.labels) > 0
for lbl in cort.labels:
lbl.name
lbl.index
lbl.x
lbl.y
lbl.z
with pytest.raises(Exception):
registry.getAtlasDescription('non-existent-atlas')
dummy_atlas_desc = """<?xml version="1.0" encoding="ISO-8859-1"?>
<atlas version="1.0">
<header>
<name>My Little Atlas</name>
<shortname>MLA</shortname>
<type>Label</type>
<images>
<imagefile>/MLA/MyLittleAtlas</imagefile>
<summaryimagefile>/MLA/MyLittleAtlas</summaryimagefile>
</images>
</header>
<data>
<label index="1" x="5" y="5" z="5">First little region</label>
<label index="2" x="6" y="6" z="6">Second little region</label>
</data>
</atlas>
"""
def test_add_remove_atlas():
testdir = tempfile.mkdtemp()
mladir = op.join(testdir, 'MLA')
mlaxmlfile = op.join(testdir, 'MLA.xml')
mlaimgfile = op.join(testdir, 'MLA', 'MyLittleAtlas.nii.gz')
def _make_dummy_atlas():
data = np.zeros((10, 10, 10))
data[5, 5, 5] = 1
data[6, 6, 6] = 2
img = fslimage.Image(data, xform=np.eye(4))
os.makedirs(mladir)
img.save(mlaimgfile)
with open(mlaxmlfile, 'wt') as f:
f.write(dummy_atlas_desc)
added = [False]
removed = [False]
reg = atlases.registry
def atlas_added(r, topic, val):
assert topic == 'add'
assert r is reg
assert val.atlasID == 'mla'
added[0] = True
def atlas_removed(r, topic, val):
assert r is reg
assert topic == 'remove'
assert val.atlasID == 'mla'
removed[0] = True
try:
_make_dummy_atlas()
reg.register('added', atlas_added, topic='add')
reg.register('removed', atlas_removed, topic='remove')
# add an atlas with an ID that is taken
with pytest.raises(Exception):
reg.addAtlas(mlaxmlfile, atlasID='harvardoxford-cortical')
reg.addAtlas(mlaxmlfile)
assert added[0]
assert reg.hasAtlas('mla')
reg.removeAtlas('mla')
assert removed[0]
finally:
shutil.rmtree(testdir)