예제 #1
0
    def test_dropKeepColumns(self):
        md0 = self._newMd()
        md1 = self._newMd()

        self.assertEqual(md0, md1)

        md.dropColumns(md0, md.MDL_XCOOR, md.MDL_YCOOR)
        self.assertEqual(md0.getActiveLabels(), [md.MDL_IMAGE])

        md.keepColumns(md1, "image")
        self.assertEqual(md1.getActiveLabels(), [md.MDL_IMAGE])

        self.assertEqual(md0, md1)
    def classifyGroupsStep(self):
        # Create two metadatas, one for classes and another one for images
        mdClasses = emlib.MetaData()
        mdImages = emlib.MetaData()

        fnNeighbours = self._getExtraPath("neighbours.xmd")
        fnGallery = self._getExtraPath("gallery.stk")

        self.classCount = 0
        self.classImages = set()

        for block in emlib.getBlocksInMetaDataFile(fnNeighbours):
            # Figure out the projection number from the block name
            projNumber = int(block.split("_")[1])

            self.classifyOneGroup(projNumber,
                                  projMdBlock="%s@%s" % (block, fnNeighbours),
                                  projRef="%06d@%s" % (projNumber, fnGallery),
                                  mdClasses=mdClasses,
                                  mdImages=mdImages)

        galleryMd = emlib.MetaData(self._getExtraPath("gallery.doc"))
        # Increment the reference number to starts from 1
        galleryMd.operate("ref=ref+1")
        mdJoined = emlib.MetaData()
        # Add extra information from the gallery metadata
        mdJoined.join1(mdClasses, galleryMd, emlib.MDL_REF)
        # Remove unnecessary columns
        md.keepColumns(mdJoined, "ref", "ref2", "image", "image1",
                       "classCount", "angleRot", "angleTilt")

        # Write both classes and images
        fnDirectional = self._getDirectionalClassesFn()
        self.info("Writting classes info to: %s" % fnDirectional)
        mdJoined.write(fnDirectional)

        fnDirectionalImages = self._getDirectionalImagesFn()
        self.info("Writing images info to: %s" % fnDirectionalImages)
        mdImages.write(fnDirectionalImages)