def _fillVolSetFromIter(self, volSet, rLev=None, it=None): it = self._lastIter() if it is None else it rLev = self._rLev if rLev is None else rLev volSet.setSamplingRate(self._getInputParticles().getSamplingRate()) modelFn = self._getFileName('model', ruNum=rLev, iter=it) print('modelFn: ', modelFn) modelStar = md.MetaData('model_classes@' + modelFn) idList = [] volFnList = [] clsDistList = [] accRotList = [] accTransList = [] resoList = [] for row in md.iterRows(modelStar): accurracyRot = row.getValue('rlnAccuracyRotations') if accurracyRot <= 90: fn = row.getValue('rlnReferenceImage') print('Volume: ', fn) fnMrc = fn + ":mrc" itemId = self._getClassId(fn) classDistrib = row.getValue('rlnClassDistribution') accurracyTras = row.getValue('rlnAccuracyTranslations') resol = row.getValue('rlnEstimatedResolution') idList.append(itemId) volFnList.append(fnMrc) clsDistList.append(classDistrib) accRotList.append(accurracyRot) accTransList.append(accurracyTras) resoList.append(resol) std = self.std if hasattr(self, 'std') else None score = self._estimateScore(accRotList, clsDistList, None, std) threshold = 1 / float(self.numOfVols.get()) print("score: ", score) for i, s in enumerate(score): vol = Volume() self._invertScaleVol(volFnList[i]) vol.setFileName(self._getOutputVolFn(volFnList[i])) vol.setObjId(idList[i]) if s <= threshold: vol._objEnabled = False vol._cmScore = pwObj.Float(s) vol._rlnClassDistribution = Float(clsDistList[i]) vol._rlnAccuracyRotations = Float(accRotList[i]) vol._rlnAccuracyTranslations = Float(accTransList[i]) vol._rlnEstimatedResolution = Float(resoList[i]) volSet.append(vol)
def _fillVolSetFromIter(self, volSet, it): volSet.setSamplingRate(self._getInputParticles().getSamplingRate()) modelStar = md.MetaData('model_classes@' + self._getFileName('model', iter=it)) for row in md.iterRows(modelStar): fn = row.getValue('rlnReferenceImage') fnMrc = fn + ":mrc" itemId = self._getClassId(fn) classDistrib = row.getValue('rlnClassDistribution') accurracyRot = row.getValue('rlnAccuracyRotations') accurracyTras = row.getValue('rlnAccuracyTranslations') resol = row.getValue('rlnEstimatedResolution') if classDistrib > 0: vol = Volume() self._invertScaleVol(fnMrc) vol.setFileName(self._getOutputVolFn(fnMrc)) vol.setObjId(itemId) vol._rlnClassDistribution = Float(classDistrib) vol._rlnAccuracyRotations = Float(accurracyRot) vol._rlnAccuracyTranslations = Float(accurracyTras) vol._rlnEstimatedResolution = Float(resol) volSet.append(vol)
def convertInputStep(self, classesFn): inputSet = self.inputSet.get() if isinstance(inputSet, SetOfClasses2D): writeSetOfClasses2D(inputSet, classesFn, writeParticles=False) else: writeSetOfParticles(inputSet, classesFn) # To re-sample input images fnDir = self._getExtraPath() fnNewParticles = join(fnDir, "input_classes.stk") TsOrig = self.inputSet.get().getSamplingRate() TsRefVol = -1 if self.thereisRefVolume: TsRefVol = self.refVolume.get().getSamplingRate() if self.useMaxRes: self.TsCurrent = max([TsOrig, self.maxResolution.get(), TsRefVol]) self.TsCurrent = self.TsCurrent / 3 Xdim = self.inputSet.get().getDimensions()[0] self.newXdim = int(round(Xdim * TsOrig / self.TsCurrent)) if self.newXdim < 40: self.newXdim = int(40) self.TsCurrent = float(TsOrig) * (float(Xdim) / float(self.newXdim)) if self.newXdim != Xdim: self.runJob("xmipp_image_resize", "-i %s -o %s --fourier %d" % (self.imgsFn, fnNewParticles, self.newXdim), numberOfMpi=self.numberOfMpi.get() * self.numberOfThreads.get()) else: self.runJob("xmipp_image_convert", "-i %s -o %s " "--save_metadata_stack %s" % (self.imgsFn, fnNewParticles, join(fnDir, "input_classes.xmd")), numberOfMpi=1) # To resample the refVolume if exists with the newXdim calculated # previously if self.thereisRefVolume: fnFilVol = self._getExtraPath('filteredVolume.vol') self.runJob("xmipp_image_convert", "-i %s -o %s -t vol" % (self.refVolume.get().getFileName(), fnFilVol), numberOfMpi=1) # TsVol = self.refVolume.get().getSamplingRate() if self.useMaxRes: if self.newXdim != Xdim: self.runJob('xmipp_image_resize', "-i %s --fourier %d" % (fnFilVol, self.newXdim), numberOfMpi=1) self.runJob('xmipp_transform_window', "-i %s --size %d" % (fnFilVol, self.newXdim), numberOfMpi=1) args = "-i %s --fourier low_pass %f --sampling %f " % ( fnFilVol, self.maxResolution.get(), self.TsCurrent) self.runJob("xmipp_transform_filter", args, numberOfMpi=1) if not self.useMaxRes: inputVolume = self.refVolume.get() else: inputVolume = Volume(fnFilVol) inputVolume.setSamplingRate(self.TsCurrent) inputVolume.setObjId(self.refVolume.get().getObjId()) fnVolumes = self._getExtraPath('input_volumes.xmd') row = metadata.Row() volumeToRow(inputVolume, row, alignType=ALIGN_NONE) md = emlib.MetaData() row.writeToMd(md, md.addObject()) md.write(fnVolumes)