1
2
3
4
5
6
7
8
9 """Collection of the known atlases"""
10
11 import os
12
13 from mvpa.atlases.base import *
14 from mvpa.atlases.fsl import *
15
16
17 KNOWN_ATLAS_FAMILIES = {
18 'pymvpa': (["talairach", "talairach-dist"],
19 r"/usr/share/rumba/atlases/data/%(name)s_atlas.xml"),
20 'fsl': (["HarvardOxford-Cortical", "HarvardOxford-Subcortical",
21 "JHU-tracts", "Juelich", "MNI", "Thalamus"],
22 r"/usr/share/fsl/data/atlases/%(name)s.xml")
23
24 }
25
26
27 KNOWN_ATLASES = dict(reduce(lambda x,y:x+[(yy,y[1]) for yy in y[0]],
28 KNOWN_ATLAS_FAMILIES.values(), []))
29
30
31 -def Atlas(filename=None, name=None, *args, **kwargs):
32 """A convinience factory for the atlases
33 """
34 if filename is None:
35 if name is None:
36 raise ValueError, \
37 "Please provide either path or name of the atlas to be used"
38 atlaspath = KNOWN_ATLASES[name]
39 filename = atlaspath % ( {'name': name} )
40 if not os.path.exists(filename):
41 raise IOError, \
42 "File %s for atlas %s was not found" % (filename, name)
43 else:
44 if name is not None:
45 raise ValueError, "Provide only filename or name"
46
47 try:
48 tempAtlas = XMLBasedAtlas(filename=filename, *args, **kwargs)
49 version = tempAtlas.version
50 atlas_source = None
51 for cls in [PyMVPAAtlas, FSLAtlas]:
52 if cls._checkVersion(version):
53 atlas_source = cls.source
54 break
55 if atlas_source is None:
56 if __debug__: debug('ATL_', "Unknown atlas " + filename)
57 return tempAtlas
58
59 atlasTypes = {
60 'PyMVPA': {"Label" : LabelsAtlas,
61 "Reference": ReferencesAtlas},
62 'FSL': {"Label" : FSLLabelsAtlas,
63 "Probabalistic": FSLProbabilisticAtlas}
64 }[atlas_source]
65 atlasType = tempAtlas.header.type.text
66 if atlasTypes.has_key(atlasType):
67 if __debug__: debug('ATL_', "Creating %s Atlas" % atlasType)
68 return atlasTypes[atlasType](filename=filename, *args, **kwargs)
69
70 else:
71 printdebug("Unknown %s type '%s' of atlas in %s." " Known are %s" %
72 (atlas_source, atlasType, filename,
73 atlasTypes.keys()), 2)
74 return tempAtlas
75 except XMLAtlasException, e:
76 print "File %s is not a valid XML based atlas due to %s" \
77 % (filename, `e`)
78 raise e
79
80
81 if __name__ == '__main__':
82 from mvpa.base import verbose
83 verbose.level = 10
84 for name in [
85
86 '/usr/share/fsl/data/atlases/HarvardOxford-Cortical.xml',
87 '/usr/share/fsl/data/atlases/HarvardOxford-Subcortical.xml'
88 ]:
89 atlas = Atlas(name)
90
91
92
93
94 print atlas[ -63, -12, 22 ]
95
96
97
98
99
100