def createAnalyzeFilesStep(self):
        """ This method will create two sqlite files that 
        will be used in by the viewer in the 'Analyze result' action.
        ctfSet: a table with average ctf values between all methods.
        ctfSetPair: a table where each row is a pair between two methods
        """
        ctfSetFn, ctfSetPairFn = self._getAnalyzeFiles()
        
        cleanPath(ctfSetFn, ctfSetPairFn)
        
        ctfSet     = Set(filename=ctfSetFn)
        ctfSetPair = em.SetOfCTF(filename=ctfSetPairFn)
        #import pdb
        #pdb.set_trace()
        minimumResolution   = {}
        maximumResolution   = {}
        averageResolution   = {}
        averageDefocusU     = {}
        averageDefocusV     = {}
        averageDefocusAngle = {}
        
        for ctf in self.setOfCTF:
            micFileName = self._getMicName(ctf)
            minimumResolution[micFileName]   = 0.
            maximumResolution[micFileName]   = 0.
            averageResolution[micFileName]   = 0.
            averageDefocusU[micFileName]     = 0.
            averageDefocusV[micFileName]     = 0.
            averageDefocusAngle[micFileName] = 0.
        
        for method1, method2, ctfId in self._freqResol:
            ctf = em.CTFModel()
            ctf1 = self.inputCTFs[method1].get()[ctfId]
            ctf2 = self.inputCTFs[method2].get()[ctfId]
            ctf.setDefocusU(    (ctf1.getDefocusU() + ctf2.getDefocusU())/2. )
            ctf.setDefocusV(    (ctf1.getDefocusV() + ctf2.getDefocusV())/2. )
            ctf.setDefocusAngle((ctf1.getDefocusAngle() + ctf2.getDefocusAngle())/2. )
            ctf.setMicrograph(   ctf1.getMicrograph())

            #Clean objId since we can have ctf from the same micrograph
            # and by default it is set to micrograph id
            ctf.cleanObjId()
            resolution = self._freqResol[(method1, method2, ctfId)]
            ctf.resolution = Float(resolution)
            ctf.method1 = String(self.methodNames[method1])
            ctf.method2 = String(self.methodNames[method2])
            # save the values of defocus for each micrograph in a list
            ctfSetPair.append(ctf)
            
            micFileName = self._getMicName(ctf1)
            
            if (not micFileName in minimumResolution or
                not micFileName in maximumResolution):
                pass
            
            
            if resolution < minimumResolution[micFileName]:
                minimumResolution[micFileName] = resolution
            
            if resolution > maximumResolution[micFileName]:
                maximumResolution[micFileName] = resolution
            
            averageResolution[micFileName]    += resolution
            averageDefocusU[micFileName]      += ctf.getDefocusU()
            averageDefocusV[micFileName]      += ctf.getDefocusV()
            averageDefocusAngle[micFileName]  += ctf.getDefocusAngle()
            
        size = float(len(self.setOfCTF))

        for ctf in self.setOfCTF:
            ctfAvg = Object()
            micFileName = self._getMicName(ctf)
            ctfAvg._micObj = ctf.getMicrograph()
            ctfAvg.averageDefocusU     = Float(averageDefocusU[micFileName] / size)
            ctfAvg.averageDefocusV     = Float(averageDefocusV[micFileName]     / size)
            ctfAvg.averageDefocusAngle = Float(averageDefocusAngle[micFileName] / size)
            ctfAvg.averageResolution   = Float(averageResolution[micFileName]   / size)
            ctfSet.append(ctfAvg)
            
        ctfSetPair.write()
        ctfSet.write()
示例#2
0
    def createAnalyzeFilesStep(self):
        """ This method will create two sqlite files that 
        will be used in by the viewer in the 'Analyze result' action.
        ctfSet: a table with average ctf values between all methods.
        ctfSetPair: a table where each row is a pair between two methods
        """
        ctfSetFn, ctfSetPairFn = self._getAnalyzeFiles()

        cleanPath(ctfSetFn, ctfSetPairFn)

        ctfSet = Set(filename=ctfSetFn)
        ctfSetPair = em.SetOfCTF(filename=ctfSetPairFn)
        #import pdb
        #pdb.set_trace()
        minimumResolution = {}
        maximumResolution = {}
        averageResolution = {}
        averageDefocusU = {}
        averageDefocusV = {}
        averageDefocusAngle = {}

        for ctf in self.setOfCTF:
            micFileName = self._getMicName(ctf)
            minimumResolution[micFileName] = 0.
            maximumResolution[micFileName] = 0.
            averageResolution[micFileName] = 0.
            averageDefocusU[micFileName] = 0.
            averageDefocusV[micFileName] = 0.
            averageDefocusAngle[micFileName] = 0.

        for method1, method2, ctfId in self._freqResol:
            ctf = em.CTFModel()
            ctf1 = self.inputCTFs[method1].get()[ctfId]
            ctf2 = self.inputCTFs[method2].get()[ctfId]
            ctf.setDefocusU((ctf1.getDefocusU() + ctf2.getDefocusU()) / 2.)
            ctf.setDefocusV((ctf1.getDefocusV() + ctf2.getDefocusV()) / 2.)
            ctf.setDefocusAngle(
                (ctf1.getDefocusAngle() + ctf2.getDefocusAngle()) / 2.)
            ctf.setMicrograph(ctf1.getMicrograph())

            #Clean objId since we can have ctf from the same micrograph
            # and by default it is set to micrograph id
            ctf.cleanObjId()
            resolution = self._freqResol[(method1, method2, ctfId)]
            ctf.resolution = Float(resolution)
            ctf.method1 = String(self.methodNames[method1])
            ctf.method2 = String(self.methodNames[method2])
            # save the values of defocus for each micrograph in a list
            ctfSetPair.append(ctf)

            micFileName = self._getMicName(ctf1)

            if (not micFileName in minimumResolution
                    or not micFileName in maximumResolution):
                pass

            if resolution < minimumResolution[micFileName]:
                minimumResolution[micFileName] = resolution

            if resolution > maximumResolution[micFileName]:
                maximumResolution[micFileName] = resolution

            averageResolution[micFileName] += resolution
            averageDefocusU[micFileName] += ctf.getDefocusU()
            averageDefocusV[micFileName] += ctf.getDefocusV()
            averageDefocusAngle[micFileName] += ctf.getDefocusAngle()

        size = float(len(self.setOfCTF))

        for ctf in self.setOfCTF:
            ctfAvg = Object()
            micFileName = self._getMicName(ctf)
            ctfAvg._micObj = ctf.getMicrograph()
            ctfAvg.averageDefocusU = Float(averageDefocusU[micFileName] / size)
            ctfAvg.averageDefocusV = Float(averageDefocusV[micFileName] / size)
            ctfAvg.averageDefocusAngle = Float(
                averageDefocusAngle[micFileName] / size)
            ctfAvg.averageResolution = Float(averageResolution[micFileName] /
                                             size)
            ctfSet.append(ctfAvg)

        ctfSetPair.write()
        ctfSet.write()