示例#1
0
    def compareClassesStep(self, i1, i2):
        set1 = self.inputClasses1.get()
        set2 = self.inputClasses2.get()

        # Compare each pair of class from set1 and set2
        # compute the Jaccard index for each (J = len(intersection) / len(union))
        # Create a list will all pairs indexes and the sort them
        jaccardList = []
        f = open(self._getPath('jaccard.txt'), 'w')
        f.write(
            '; class1 class2 intersection(i) union(i) jaccard index = len(i)/len(u)\n'
        )
        for cls1 in set1:
            ids1 = cls1.getIdSet()
            for cls2 in set2:
                ids2 = cls2.getIdSet()
                inter = len(ids1.intersection(ids2))
                union = len(ids1.union(ids2))
                jaccardIndex = float(inter) / union
                jaccardTuple = (cls1.getObjId(), cls2.getObjId(), inter, union,
                                jaccardIndex)
                f.write('%d %d %d %d %0.3f\n' % jaccardTuple)
                jaccardList.append(jaccardTuple)
        f.close()

        jaccardList.sort(key=lambda e: e[4], reverse=True)
        visitedClasses = set()
        outputFn = self._getPath('consensus.sqlite')
        cleanPath(outputFn)
        outputSet = EMSet(filename=outputFn)

        for clsId1, clsId2, inter, union, jaccardIndex in jaccardList:
            if clsId1 not in visitedClasses:
                visitedClasses.add(clsId1)  # mark as visited
                cls1 = set1[clsId1]
                cls2 = set2[clsId2]
                o = Object()
                o.setObjLabel('classes %d - %d' % (clsId1, clsId2))
                o.class1 = cls1.clone()
                o.class1.id = Integer(clsId1)
                o.class2 = cls2.clone()
                o.class2.id = Integer(clsId2)
                o.jaccard = Float(jaccardIndex)
                o.intersection = Integer(inter)
                o.union = Integer(union)
                outputSet.append(o)

        self._defineOutputs(outputConsensus=outputSet)
    def compareClassesStep(self, i1, i2):
        set1 = self.inputClasses1.get()
        set2 = self.inputClasses2.get()
        
        # Compare each pair of class from set1 and set2
        # compute the Jaccard index for each (J = len(intersection) / len(union))
        # Create a list will all pairs indexes and the sort them
        jaccardList = []
        f = open(self._getPath('jaccard.txt'), 'w')
        f.write('; class1 class2 intersection(i) union(i) jaccard index = len(i)/len(u)\n')
        for cls1 in set1:
            ids1 = cls1.getIdSet()
            for cls2 in set2:
                ids2 = cls2.getIdSet()
                inter = len(ids1.intersection(ids2))
                union = len(ids1.union(ids2))
                jaccardIndex = float(inter) / union
                jaccardTuple = (cls1.getObjId(), cls2.getObjId(), inter, union, jaccardIndex)
                f.write('%d %d %d %d %0.3f\n' % jaccardTuple)
                jaccardList.append(jaccardTuple)
        f.close()

        jaccardList.sort(key=lambda e: e[4], reverse=True)
        visitedClasses = set()
        outputFn = self._getPath('consensus.sqlite')
        cleanPath(outputFn)
        outputSet = EMSet(filename=outputFn)
        
        for clsId1, clsId2, inter, union, jaccardIndex in jaccardList:
            if clsId1 not in visitedClasses:
                visitedClasses.add(clsId1) # mark as visited
                cls1 = set1[clsId1]
                cls2 = set2[clsId2]
                o = Object()
                o.setObjLabel('classes %d - %d' % (clsId1, clsId2))
                o.class1 = cls1.clone()
                o.class1.id = Integer(clsId1)
                o.class2 = cls2.clone()
                o.class2.id = Integer(clsId2)
                o.jaccard = Float(jaccardIndex)
                o.intersection = Integer(inter)
                o.union = Integer(union)
                outputSet.append(o)
                
        self._defineOutputs(outputConsensus=outputSet)
示例#3
0
 def __init__(self, imag=0., real=0., **args):
     Object.__init__(self, **args)
     self.imag = Float(imag)
     self.real = Float(real)
    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()
示例#5
0
 def __init__(self, imag=0.0, real=0.0, **args):
     Object.__init__(self, **args)
     self.imag = Float(imag)
     self.real = Float(real)
示例#6
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()