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()
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()