Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
 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 
Пример #6
0
    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