def __init__(self, distance=0, reference_level=None, *args, **kwargs): """Initialize `ReferencesAtlas` """ PyMVPAAtlas.__init__(self, *args, **kwargs) # sanity checks if not ('reference-atlas' in XMLBasedAtlas._children_tags(self.header)): raise XMLAtlasException( "ReferencesAtlas must refer to a some other atlas") referenceAtlasName = self.header["reference-atlas"].text # uff -- another evil import but we better use the factory method from mvpa.atlases.warehouse import Atlas self.__referenceAtlas = Atlas(filename=reuse_absolute_path( self._filename, referenceAtlasName)) if self.__referenceAtlas.space != self.space or \ self.__referenceAtlas.space_flavor != self.space_flavor: raise XMLAtlasException( "Reference and original atlases should be in the same space") self.__referenceLevel = None # pylint shut up if reference_level is not None: self.set_reference_level(reference_level) self.set_distance(distance)
def __init__(self, distance=0, *args, **kwargs): """Initialize `ReferencesAtlas` """ PyMVPAAtlas.__init__(self, *args, **kwargs) # sanity checks if not ('reference-atlas' in XMLBasedAtlas._children_tags( self.header)): raise XMLAtlasException( "ReferencesAtlas must refer to a some other atlas") referenceAtlasName = self.header["reference-atlas"].text # uff -- another evil import but we better use the factory method from mvpa.atlases.warehouse import Atlas self.__referenceAtlas = Atlas( filename=reuse_absolute_path(self._filename, referenceAtlasName)) if self.__referenceAtlas.space != self.space or \ self.__referenceAtlas.space_flavor != self.space_flavor: raise XMLAtlasException( "Reference and original atlases should be in the same space") self.__referenceLevel = None self.set_distance(distance)
class ReferencesAtlas(PyMVPAAtlas): """ Atlas which provides references to the other atlases. Example: the atlas which has references to the closest points (closest Gray, etc) in another atlas. """ def __init__(self, distance=0, *args, **kwargs): """Initialize `ReferencesAtlas` """ PyMVPAAtlas.__init__(self, *args, **kwargs) # sanity checks if not ('reference-atlas' in XMLBasedAtlas._children_tags(self.header)): raise XMLAtlasException( "ReferencesAtlas must refer to a some other atlas") referenceAtlasName = self.header["reference-atlas"].text # uff -- another evil import but we better use the factory method from mvpa.atlases.warehouse import Atlas self.__referenceAtlas = Atlas(filename=reuseAbsolutePath( self._filename, referenceAtlasName)) if self.__referenceAtlas.space != self.space or \ self.__referenceAtlas.spaceFlavor != self.spaceFlavor: raise XMLAtlasException( "Reference and original atlases should be in the same space") self.__referenceLevel = None self.setDistance(distance) __doc__ = enhancedDocString('ReferencesAtlas', locals(), PyMVPAAtlas) # number of levels must be of the referenced atlas due to # handling of that in __getitem__ #Nlevels = property(fget=lambda self:self.__referenceAtlas.Nlevels) def _getNLevelsVirtual(self): return self.__referenceAtlas.Nlevels def setReferenceLevel(self, level): """ Set the level which will be queried """ if self._levels_dict.has_key(level): self.__referenceLevel = self._levels_dict[level] else: raise IndexError("Unknown reference level " + `level` + ". Known are " + `self._levels_dict.keys()`) def labelVoxel(self, c, levels = None): if self.__referenceLevel is None: warning("You did not provide what level to use " "for reference. Assigning 0th level -- '%s'" % (self._levels_dict[0],)) self.setReferenceLevel(0) # return self.__referenceAtlas.labelVoxel(c, levels) c = self._checkRange(c) # obtain coordinates of the closest voxel cref = self._data[ self.__referenceLevel.indexes, c[2], c[1], c[0] ] dist = norm( (cref - c) * self.voxdim ) if __debug__: debug('ATL__', "Closest referenced point for %s is " "%s at distance %3.2f" % (`c`, `cref`, dist)) if (self.distance - dist) >= 1e-3: # neglect everything smaller result = self.__referenceAtlas.labelVoxel(cref, levels) result['voxel_referenced'] = c result['distance'] = dist else: result = self.__referenceAtlas.labelVoxel(c, levels) if __debug__: debug('ATL__', "Closest referenced point is " "further than desired distance %.2f" % self.distance) result['voxel_referenced'] = None result['distance'] = 0 return result def levelsListing(self): return self.__referenceAtlas.levelsListing() def _getLevelsDict_virtual(self): return self.__referenceAtlas.levels_dict def setDistance(self, distance): """ Set desired maximal distance for the reference """ if distance < 0: raise ValueError("Distance should not be negative. " " Thus '%f' is not a legal value" % distance) if __debug__: debug('ATL__', "Setting maximal distance for queries to be %d" % distance) self.__distance = distance distance = property(fget=lambda self:self.__distance, fset=setDistance)
class ReferencesAtlas(PyMVPAAtlas): """ Atlas which provides references to the other atlases. Example: the atlas which has references to the closest points (closest Gray, etc) in another atlas. """ def __init__(self, distance=0, *args, **kwargs): """Initialize `ReferencesAtlas` """ PyMVPAAtlas.__init__(self, *args, **kwargs) # sanity checks if not ('reference-atlas' in XMLBasedAtlas._children_tags( self.header)): raise XMLAtlasException( "ReferencesAtlas must refer to a some other atlas") referenceAtlasName = self.header["reference-atlas"].text # uff -- another evil import but we better use the factory method from mvpa.atlases.warehouse import Atlas self.__referenceAtlas = Atlas( filename=reuse_absolute_path(self._filename, referenceAtlasName)) if self.__referenceAtlas.space != self.space or \ self.__referenceAtlas.space_flavor != self.space_flavor: raise XMLAtlasException( "Reference and original atlases should be in the same space") self.__referenceLevel = None self.set_distance(distance) __doc__ = enhanced_doc_string('ReferencesAtlas', locals(), PyMVPAAtlas) # number of levels must be of the referenced atlas due to # handling of that in __getitem__ #nlevels = property(fget=lambda self:self.__referenceAtlas.nlevels) ##REF: Name was automagically refactored def _get_nlevels_virtual(self): return self.__referenceAtlas.nlevels ##REF: Name was automagically refactored def set_reference_level(self, level): """ Set the level which will be queried """ if self._levels.has_key(level): self.__referenceLevel = self._levels[level] else: raise IndexError, \ "Unknown reference level %r. " % level + \ "Known are %r" % (self._levels.keys(), ) ##REF: Name was automagically refactored def label_voxel(self, c, levels=None): if self.__referenceLevel is None: warning("You did not provide what level to use " "for reference. Assigning 0th level -- '%s'" % (self._levels[0], )) self.set_reference_level(0) # return self.__referenceAtlas.label_voxel(c, levels) c = self._check_range(c) # obtain coordinates of the closest voxel cref = self._data[self.__referenceLevel.indexes, c[2], c[1], c[0]] dist = norm((cref - c) * self.voxdim) if __debug__: debug( 'ATL__', "Closest referenced point for %r is " "%r at distance %3.2f" % (c, cref, dist)) if (self.distance - dist) >= 1e-3: # neglect everything smaller result = self.__referenceAtlas.label_voxel(cref, levels) result['voxel_referenced'] = c result['distance'] = dist else: result = self.__referenceAtlas.label_voxel(c, levels) if __debug__: debug( 'ATL__', "Closest referenced point is " "further than desired distance %.2f" % self.distance) result['voxel_referenced'] = None result['distance'] = 0 return result ##REF: Name was automagically refactored def levels_listing(self): return self.__referenceAtlas.levels_listing() ##REF: Name was automagically refactored def _get_levels_virtual(self): return self.__referenceAtlas.levels ##REF: Name was automagically refactored def set_distance(self, distance): """Set desired maximal distance for the reference """ if distance < 0: raise ValueError("Distance should not be negative. " " Thus '%f' is not a legal value" % distance) if __debug__: debug('ATL__', "Setting maximal distance for queries to be %d" % distance) self.__distance = distance distance = property(fget=lambda self: self.__distance, fset=set_distance)