def getSlide(self, slideNumber = None, **kwargs): rc = kwargs['renderingProperties'] tc = kwargs['tracingProperties'] newSlide = barTracedSlideRenderer(\ rendererConfiguration = rc,\ tracingConfiguration = tc) newSlide.slideNumber = slideNumber if slideNumber == None: for contour in self._contours: newSlide.addPath(contour.getBarPath()) for marker in self._markers: newSlide.addLabel(marker.getLabel()) for textElem in self._textElems: newSlide.addLabel(textElem.getLabel()) if slideNumber is not None: # Choose slide element corresponding to provided slide number: # elementKey = self.slideRange[slideNumber] # coordElemList = self._zindex[elementKey] coordElemList = self._zindex[self.slideRange[slideNumber]] for contour in coordElemList.paths: newSlide.addPath(contour.getBarPath()) for labelEl in coordElemList.labels: newSlide.addLabel(labelEl.getLabel()) newSlide.updateMetadata(barBregmaMetadataElement(coordElemList.zCoord)) transformationMatrixTuple=(\ self._scaling[0], self._coord[0], self._scaling[1], self._coord[1]) newSlide.updateMetadata =\ (barTransfMatrixMetadataElement(transformationMatrixTuple)) return newSlide
def _getSlide(self, slideNumber): """ @type slideNumber: C{int} @param slideNumber: Number of slide to extract @rtype: L{barTracedSlideRenderer<barTracedSlideRenderer>} @return: Traced slide with given number. """ # Get PIL bitmap image containing slide with given slideNumber # It is assumed that image is provided in RGB mode. sourceImage = self._getSourceImage(slideNumber) # Extract list of uniqe colours from source slide image # list of tuples in rgbformat uniqeColours = self._getUniqeColours(sourceImage) # Create traced slide: # Use customized slide tempate if provided try: self.slideTemplate customSlideTemplate = self.slideTemplate except: customSlideTemplate = None retSlide = barTracedSlideRenderer( slideTemplate=customSlideTemplate, rendererConfiguration=self.renderingProperties, tracingConfiguration=self.tracingProperties) retSlide.slideNumber = slideNumber # Remove background color from the set of colours in the bitmap uniqeColours.remove(self.backgroundColor) # Iterate over all uniqe colours and create set of paths basing on # every uniqe colour: for imageColour in uniqeColours: map(retSlide.addPath, self._processStructure(sourceImage, imageColour)) # Append metadata to newly created slide: spatialLocation = [ barTransfMatrixMetadataElement( self._getSpatialTransfMatrix(slideNumber)), barBregmaMetadataElement(self._getZCoord(slideNumber)) ] retSlide.updateMetadata(spatialLocation) return retSlide
def _getSlide(self, slideNumber): """ @type slideNumber: C{int} @param slideNumber: Number of slide to extract @rtype: L{barTracedSlideRenderer<barTracedSlideRenderer>} @return: Traced slide with given number. """ # Get PIL bitmap image containing slide with given slideNumber # It is assumed that image is provided in RGB mode. sourceImage = self._getSourceImage(slideNumber) # Extract list of uniqe colours from source slide image # list of tuples in rgbformat uniqeColours = self._getUniqeColours(sourceImage) # Create traced slide: # Use customized slide tempate if provided try: self.slideTemplate customSlideTemplate = self.slideTemplate except: customSlideTemplate = None retSlide = barTracedSlideRenderer( slideTemplate=customSlideTemplate, rendererConfiguration=self.renderingProperties, tracingConfiguration=self.tracingProperties) retSlide.slideNumber = slideNumber # Remove background color from the set of colours in the bitmap uniqeColours.remove(self.backgroundColor) # Iterate over all uniqe colours and create set of paths basing on # every uniqe colour: for imageColour in uniqeColours: map(retSlide.addPath, self._processStructure( sourceImage, imageColour)) # Append metadata to newly created slide: spatialLocation = [ barTransfMatrixMetadataElement( self._getSpatialTransfMatrix(slideNumber)), barBregmaMetadataElement(self._getZCoord(slideNumber))] retSlide.updateMetadata(spatialLocation) return retSlide
def getSlide(self, slideNumber=None, **kwargs): rc = kwargs['renderingProperties'] tc = kwargs['tracingProperties'] newSlide = barTracedSlideRenderer(\ rendererConfiguration = rc,\ tracingConfiguration = tc) newSlide.slideNumber = slideNumber if slideNumber == None: for contour in self._contours: newSlide.addPath(contour.getBarPath()) for marker in self._markers: newSlide.addLabel(marker.getLabel()) for textElem in self._textElems: newSlide.addLabel(textElem.getLabel()) if slideNumber is not None: # Choose slide element corresponding to provided slide number: # elementKey = self.slideRange[slideNumber] # coordElemList = self._zindex[elementKey] coordElemList = self._zindex[self.slideRange[slideNumber]] for contour in coordElemList.paths: newSlide.addPath(contour.getBarPath()) for labelEl in coordElemList.labels: newSlide.addLabel(labelEl.getLabel()) newSlide.updateMetadata( barBregmaMetadataElement(coordElemList.zCoord)) transformationMatrixTuple=(\ self._scaling[0], self._coord[0], self._scaling[1], self._coord[1]) newSlide.updateMetadata =\ (barTransfMatrixMetadataElement(transformationMatrixTuple)) return newSlide
def parse(self, slideNumber,\ generateLabels = True,\ useIndexer = True,\ writeSlide = True): """ @param slideNumber: int @type slideNumber: Number of slide which will be parsed Creates svg document from JSON file for given slide number. Slide is created using following workflow: - Get template of empty slide - Get list of structures in given slide - Extract definitions of paths corresponding to structures, add them into slide - Extract metadata and put in into SVG slide - Generate positions of labels corresponding to created paths and append therm """ barExternalParser.parse(self, slideNumber) tracedSlide = barTracedSlideRenderer(\ slideTemplate = self.slideTemplate,\ rendererConfiguration = self.renderingProperties,\ tracingConfiguration = self.tracingProperties) # Define string version of current slide number # I do it because loaded json files are converted to dictionaries # and integer keys are converted to string keys ( 1 goes to '1') # so all keys are strings CurrentSlideNumber = str(slideNumber) # Extract structures that are defined in slide >CurrentSlideNumber< # There are two ways of indexing structures: by dictionary (keys are # slidenumbers) or in list. # Code belows tries to load data in both ways try: CurrentSlideStructures = self._sbaImportData['brainslices'][CurrentSlideNumber] except TypeError: CurrentSlideStructures = self._sbaImportData['brainslices'][int(CurrentSlideNumber)] # CurrentSlideStructures is dictionary that maps color in hexagonal # format to number of polygon corresponding to given structure # eg. {'fafafa':[0]} # so key id color-encoded name of the structure and list is list of # path indexes stored in self.sbaImportData['svgpaths'] list # Dump information about structures in given slide print >>sys.stderr, "Converting slide number:\t%d" % slideNumber if __debug__: print >>sys.stderr, "\tThere are %d structures defined." % len(CurrentSlideStructures) print >>sys.stderr, "\tInitializing structure index." # Now we iterate over all structures in given slide for structure in CurrentSlideStructures.keys(): # TODO come up with idea how to do it better # Now two thing are passed structureID, and list of path indexes # Create path definition map(tracedSlide.addPath, self._parseSingleStructure(structure, CurrentSlideStructures[structure])) # Extract stereoraxic transformation matrix and put it into SVG slide offsets=[\ self._sbaImportData['xyscaling'][str(CurrentSlideNumber)][0:2], self._sbaImportData['xyscaling'][str(CurrentSlideNumber)][2:]] spatialData = self._saveTransformationAsMetadata(offsets,\ self._sbaImportData['bregma'][slideNumber]) tracedSlide.updateMetadata(spatialData) corrArray = np.array([[0.1,0,0],[0,0.1,0],[0,0,0]]) tracedSlide.affineTransform(corrArray) # Perform additional actions if requested if generateLabels: tracedSlide.generateLabels() if writeSlide: tracedSlide.writeXMLtoFile(self._getOutputFilename(slideNumber)) if useIndexer: self.indexer.indexSingleSlide(tracedSlide, slideNumber) return tracedSlide
def parse(self, slideNumber,\ generateLabels = True,\ useIndexer = True,\ writeSlide = True): """ @param slideNumber: int @type slideNumber: Number of slide which will be parsed Creates svg document from JSON file for given slide number. Slide is created using following workflow: - Get template of empty slide - Get list of structures in given slide - Extract definitions of paths corresponding to structures, add them into slide - Extract metadata and put in into SVG slide - Generate positions of labels corresponding to created paths and append therm """ barExternalParser.parse(self, slideNumber) tracedSlide = barTracedSlideRenderer(\ slideTemplate = self.slideTemplate,\ rendererConfiguration = self.renderingProperties,\ tracingConfiguration = self.tracingProperties) # Define string version of current slide number # I do it because loaded json files are converted to dictionaries # and integer keys are converted to string keys ( 1 goes to '1') # so all keys are strings CurrentSlideNumber = str(slideNumber) # Extract structures that are defined in slide >CurrentSlideNumber< # There are two ways of indexing structures: by dictionary (keys are # slidenumbers) or in list. # Code belows tries to load data in both ways try: CurrentSlideStructures = self._sbaImportData['brainslices'][ CurrentSlideNumber] except TypeError: CurrentSlideStructures = self._sbaImportData['brainslices'][int( CurrentSlideNumber)] # CurrentSlideStructures is dictionary that maps color in hexagonal # format to number of polygon corresponding to given structure # eg. {'fafafa':[0]} # so key id color-encoded name of the structure and list is list of # path indexes stored in self.sbaImportData['svgpaths'] list # Dump information about structures in given slide print >> sys.stderr, "Converting slide number:\t%d" % slideNumber if __debug__: print >> sys.stderr, "\tThere are %d structures defined." % len( CurrentSlideStructures) print >> sys.stderr, "\tInitializing structure index." # Now we iterate over all structures in given slide for structure in CurrentSlideStructures.keys(): # TODO come up with idea how to do it better # Now two thing are passed structureID, and list of path indexes # Create path definition map( tracedSlide.addPath, self._parseSingleStructure(structure, CurrentSlideStructures[structure])) # Extract stereoraxic transformation matrix and put it into SVG slide offsets=[\ self._sbaImportData['xyscaling'][str(CurrentSlideNumber)][0:2], self._sbaImportData['xyscaling'][str(CurrentSlideNumber)][2:]] spatialData = self._saveTransformationAsMetadata(offsets,\ self._sbaImportData['bregma'][slideNumber]) tracedSlide.updateMetadata(spatialData) corrArray = np.array([[0.1, 0, 0], [0, 0.1, 0], [0, 0, 0]]) tracedSlide.affineTransform(corrArray) # Perform additional actions if requested if generateLabels: tracedSlide.generateLabels() if writeSlide: tracedSlide.writeXMLtoFile(self._getOutputFilename(slideNumber)) if useIndexer: self.indexer.indexSingleSlide(tracedSlide, slideNumber) return tracedSlide