Пример #1
0
 def checkResult(self, testfiles, outDir, random):
     error = ""
     try:
         from xmipp import FileName, Image, compareTwoFiles, compareTwoMetadataFiles
         for file in testfiles:
             file = join(outDir, file)
             fileGoldStd = file.replace(self.fnDir, 'goldStandard')
             result = True
             if not exists(file):
                 error += file + " was NOT produced\n"
             else:
                 if (random):
                     self.warning += file + " was created using a random seed, check skipped\n"
                     self.warningFlag = True
                 else:
                     fnGoldStd = FileName(fileGoldStd)
                     if fnGoldStd.isImage():
                         im1 = Image(fileGoldStd)
                         im2 = Image(file)
                         result = im1.equal(im2, 0.001)
                     elif fnGoldStd.isMetaData():
                         result = compareTwoMetadataFiles(file, fileGoldStd)
                     else:
                         result = compareTwoFiles(file, fileGoldStd, 0)
             if not result:
                 error += " file '%s' and '%s' are NOT identical\n" % (
                     file, fileGoldStd)
     except KeyboardInterrupt:
         raise
     except Exception, ex:
         error += " Error checking results: '%s'\n" % str(ex)
Пример #2
0
 def checkResult(self, testfiles, outDir, random):
     error = ""
     try:
         from xmipp import FileName, Image, compareTwoFiles, compareTwoMetadataFiles
         for file in testfiles:
             file = join(outDir, file)
             fileGoldStd = file.replace(self.fnDir, 'goldStandard')
             result = True
             if not exists(file):
                 error += file + " was NOT produced\n"
             else:
                 if (random):
                     self.warning += file + " was created using a random seed, check skipped\n"
                     self.warningFlag = True
                 else:
                     fnGoldStd = FileName(fileGoldStd)
                     if fnGoldStd.isImage():
                         im1 = Image(fileGoldStd)
                         im2 = Image(file)
                         result = im1.equal(im2, 0.001)
                     elif fnGoldStd.isMetaData():
                         result = compareTwoMetadataFiles(file, fileGoldStd)
                     else:
                         result = compareTwoFiles(file, fileGoldStd, 0)
             if not result:
                 error += " file '%s' and '%s' are NOT identical\n" % (file, fileGoldStd)
     except KeyboardInterrupt:
         raise
     except Exception, ex:
         error += " Error checking results: '%s'\n" % str(ex)
Пример #3
0
    def produceAlignedImagesStep(self, volumeIsCTFCorrected, fn, images):

        from numpy import array, dot

        fnOut = "classes_aligned@" + fn
        MDin = MetaData(images)
        MDout = MetaData()
        n = 1
        hasCTF = MDin.containsLabel(xmipp.MDL_CTF_MODEL)
        for i in MDin:
            fnImg = MDin.getValue(xmipp.MDL_IMAGE, i)
            fnImgRef = MDin.getValue(xmipp.MDL_IMAGE_REF, i)
            maxCC = MDin.getValue(xmipp.MDL_MAXCC, i)
            rot = MDin.getValue(xmipp.MDL_ANGLE_ROT, i)
            tilt = MDin.getValue(xmipp.MDL_ANGLE_TILT, i)
            psi = -1.0 * MDin.getValue(xmipp.MDL_ANGLE_PSI, i)
            flip = MDin.getValue(xmipp.MDL_FLIP, i)
            if flip:
                psi = -psi
            eulerMatrix = Euler_angles2matrix(0.0, 0.0, psi)
            x = MDin.getValue(xmipp.MDL_SHIFT_X, i)
            y = MDin.getValue(xmipp.MDL_SHIFT_Y, i)
            shift = array([x, y, 0])
            shiftOut = dot(eulerMatrix, shift)
            [x, y, z] = shiftOut
            if flip:
                x = -x
            id = MDout.addObject()
            MDout.setValue(xmipp.MDL_IMAGE, fnImg, id)
            MDout.setValue(xmipp.MDL_IMAGE_REF, fnImgRef, id)
            MDout.setValue(xmipp.MDL_IMAGE1, "%05d@%s" % (n, self._getExtraPath("diff.stk")), id)
            if hasCTF:
                fnCTF = MDin.getValue(xmipp.MDL_CTF_MODEL, i)
                MDout.setValue(xmipp.MDL_CTF_MODEL, fnCTF, id)
            MDout.setValue(xmipp.MDL_MAXCC, maxCC, id)
            MDout.setValue(xmipp.MDL_ANGLE_ROT, rot, id)
            MDout.setValue(xmipp.MDL_ANGLE_TILT, tilt, id)
            MDout.setValue(xmipp.MDL_ANGLE_PSI, psi, id)
            MDout.setValue(xmipp.MDL_SHIFT_X, x, id)
            MDout.setValue(xmipp.MDL_SHIFT_Y, y, id)
            MDout.setValue(xmipp.MDL_FLIP, flip, id)
            MDout.setValue(xmipp.MDL_ENABLED, 1, id)
            n += 1
        MDout.write(fnOut, xmipp.MD_APPEND)

        # Actually create the differences
        img = Image()
        imgRef = Image()
        if hasCTF and volumeIsCTFCorrected:
            Ts = MDin.getValue(xmipp.MDL_SAMPLINGRATE, MDin.firstObject())

        for i in MDout:
            img.readApplyGeo(MDout, i)
            imgRef.read(MDout.getValue(xmipp.MDL_IMAGE_REF, i))
            if hasCTF and volumeIsCTFCorrected:
                fnCTF = MDout.getValue(xmipp.MDL_CTF_MODEL, i)
                imgRef.applyCTF(fnCTF, Ts)
                img.convert2DataType(DT_DOUBLE)
            imgDiff = img - imgRef
            imgDiff.write(MDout.getValue(xmipp.MDL_IMAGE1, i))
Пример #4
0
    def preRun(self):

        self.ImportProtocol()
        
        self.Iteration_Working_Directory = os.path.join(self.pmprotWorkingDir,'Iter_00'+ str(self.iterationNo))
        self.subtractionDir = self.workingDirPath(self.RunName)
        self.volsDir        = self.workingDirPath(self.volsDir)
        self.referenceDir   = self.workingDirPath(self.referenceDir)
        self.subImgsDir     = self.workingDirPath(self.subImgsDir)
        self.scaledImages   = self.workingDirPath(self.scaledImages)
        self.resultsImagesName = self.workingDirPath(self.resultsImagesName)
        
        self.localFilenameCurrentAngles = self.workingDirPath(self.localCurrentAngles)
        
        self.CtfGroupDirectory  = self.workingDirPath(self.CtfGroupDirectoryName)
        tmpCTFname              = join(self.CtfGroupDirectoryName,self.localStackCTFs)
        self.projmatchStackCTFs = join(self.pmprotWorkingDir,tmpCTFname)
        self.localStackCTFs     = self.workingDirPath(tmpCTFname)
        
        tmpCTFname            = join(self.CtfGroupDirectoryName,self.localDocCTFs)
        self.projmatchDocCTFs = join(self.pmprotWorkingDir,tmpCTFname)
        self.localDocCTFs     = self.workingDirPath(tmpCTFname)
                
        if(self.MaxChangeInAngles > 100):
            self.MaxChangeInAngles=-1
            
        tmpFilename = self.current_angles
        self.filename_currentAngles = os.path.join(self.Iteration_Working_Directory,tmpFilename)
        
        if(self.doScaleImages):
            
            md = MetaData(self.filename_currentAngles)
            img = Image()
            img.readApplyGeo(md,       1, False, DATA, ALL_IMAGES,False)
            x=y=z=n=0
            (x,y,z,n) = img.getDimensions()
            factorX = x / self.dimX
            if (self.dimY<0):
                factorY = y / self.dimX
            else:
                factorY = y / self.dimY

            self.dRradiusMax = round(self.dRradiusMax/factorX)
            self.dRradiusMin = round(self.dRradiusMin/factorY)
Пример #5
0
    def produceAlignedImagesStep(self, volumeIsCTFCorrected, fn, images):

        from numpy import array, dot
        fnOut = 'classes_aligned@' + fn
        MDin = MetaData(images)
        MDout = MetaData()
        n = 1
        hasCTF = MDin.containsLabel(xmipp.MDL_CTF_MODEL)
        for i in MDin:
            fnImg = MDin.getValue(xmipp.MDL_IMAGE, i)
            fnImgRef = MDin.getValue(xmipp.MDL_IMAGE_REF, i)
            maxCC = MDin.getValue(xmipp.MDL_MAXCC, i)
            rot = MDin.getValue(xmipp.MDL_ANGLE_ROT, i)
            tilt = MDin.getValue(xmipp.MDL_ANGLE_TILT, i)
            psi = -1. * MDin.getValue(xmipp.MDL_ANGLE_PSI, i)
            flip = MDin.getValue(xmipp.MDL_FLIP, i)
            if flip:
                psi = -psi
            eulerMatrix = Euler_angles2matrix(0., 0., psi)
            x = MDin.getValue(xmipp.MDL_SHIFT_X, i)
            y = MDin.getValue(xmipp.MDL_SHIFT_Y, i)
            shift = array([x, y, 0])
            shiftOut = dot(eulerMatrix, shift)
            [x, y, z] = shiftOut
            if flip:
                x = -x
            id = MDout.addObject()
            MDout.setValue(xmipp.MDL_IMAGE, fnImg, id)
            MDout.setValue(xmipp.MDL_IMAGE_REF, fnImgRef, id)
            MDout.setValue(xmipp.MDL_IMAGE1,
                           "%05d@%s" % (n, self._getExtraPath("diff.stk")), id)
            if hasCTF:
                fnCTF = MDin.getValue(xmipp.MDL_CTF_MODEL, i)
                MDout.setValue(xmipp.MDL_CTF_MODEL, fnCTF, id)
            MDout.setValue(xmipp.MDL_MAXCC, maxCC, id)
            MDout.setValue(xmipp.MDL_ANGLE_ROT, rot, id)
            MDout.setValue(xmipp.MDL_ANGLE_TILT, tilt, id)
            MDout.setValue(xmipp.MDL_ANGLE_PSI, psi, id)
            MDout.setValue(xmipp.MDL_SHIFT_X, x, id)
            MDout.setValue(xmipp.MDL_SHIFT_Y, y, id)
            MDout.setValue(xmipp.MDL_FLIP, flip, id)
            MDout.setValue(xmipp.MDL_ENABLED, 1, id)
            n += 1
        MDout.write(fnOut, xmipp.MD_APPEND)

        # Actually create the differences
        img = Image()
        imgRef = Image()
        if hasCTF and volumeIsCTFCorrected:
            Ts = MDin.getValue(xmipp.MDL_SAMPLINGRATE, MDin.firstObject())

        for i in MDout:
            img.readApplyGeo(MDout, i)
            imgRef.read(MDout.getValue(xmipp.MDL_IMAGE_REF, i))
            if hasCTF and volumeIsCTFCorrected:
                fnCTF = MDout.getValue(xmipp.MDL_CTF_MODEL, i)
                imgRef.applyCTF(fnCTF, Ts)
                img.convert2DataType(DT_DOUBLE)
            imgDiff = img - imgRef
            imgDiff.write(MDout.getValue(xmipp.MDL_IMAGE1, i))
Пример #6
0
    
    if fn.isMetaData():
        md = MetaData(fn)
        fileList = []
        for objId in md:
            fileList.append(md.getValue(MDL_IMAGE, objId))
            if len(fileList) > 10:
                break                      
        fn = getFilename()
        if fn is None:
            return 
            
    # if radius = -1 then we take half of the image dimension
    if outerRadius < 0:
        if fn.isImage():
            img = Image()
            #ROB: must convert to str first or PyString_AsString will complain
            img.read(fn, HEADER)
            xdim = img.getDimensions()[0]
            outerRadius = xdim / 2 
            if unit == 'angstrom':
                outerRadius *= sampling
                
            gui.setVarValue(outerVarName, outerRadius)
    from protlib_gui_ext import XmippBrowserMask
    results = showBrowseDialog(parent=gui.master, browser=XmippBrowserMask, title="Select mask radius", allowFilter=False, 
                                    extra={'fileList': fileList, 'outerRadius': outerRadius, 
                                           'innerRadius': innerRadius, 'showInner': showInner,
                                           'unit':unit, 'sampling':sampling})
    if results:
#        if (unit == 'angstrom'):