def convertInputStep(self, resetDeps): """ Create the input file in STAR format as expected by Relion. If the input particles comes from Relion, just link the file. Params: particlesId, volumesId: use this parameters just to force redo of convert if either the input particles and/or input volumes are changed. """ self._imgFnList = [] imgSet = self._getInputParticles() imgStar = self._getFileName('input_star') subset = em.SetOfParticles(filename=":memory:") newIndex = 1 for img in imgSet.iterItems(orderBy='RANDOM()', direction='ASC'): self._scaleImages(newIndex, img) newIndex += 1 subset.append(img) subsetSize = self.subsetSize.get() minSize = min(subsetSize, imgSet.getSize()) if subsetSize > 0 and subset.getSize() == minSize: break writeSetOfParticles(subset, imgStar, self._getExtraPath(), alignType=em.ALIGN_NONE, postprocessImageRow=self._postprocessParticleRow) self._convertInput(subset) self._convertRef()
def _getIterData(self, it): data_sqlite = self._getFileName('data_scipion', iter=it) if not exists(data_sqlite): iterImgSet = em.SetOfParticles(filename=data_sqlite) iterImgSet.copyInfo(self._getInputParticles()) self._fillDataFromIter(iterImgSet, it) iterImgSet.write() iterImgSet.close() return data_sqlite
def writeSqliteIterData(imgStar, imgSqlite, **kwargs): """ Given a Relion images star file (from some iteration) create the corresponding SetOfParticles (sqlite file) for this iteration. This file can be visualized sorted by the LogLikelihood. """ cleanPath(imgSqlite) imgSet = em.SetOfParticles(filename=imgSqlite) readSetOfParticles(imgStar, imgSet, **kwargs) imgSet.write()
def _getIterData(self, it, **kwargs): """ Sort the it??.data.star file by the maximum likelihood. """ data_sqlite = self._getFileName('data_scipion', iter=it) if not exists(data_sqlite): iterImgSet = em.SetOfParticles(filename=data_sqlite) iterImgSet.copyInfo(self._getInputParticles()) self._fillDataFromIter(iterImgSet, it) iterImgSet.write() iterImgSet.close() return data_sqlite
def _getIterParticles(self, it, clean=False): import pyworkflow.em as em """ Return a classes .sqlite file for this iteration. If the file doesn't exists, it will be created by converting from this iteration data.star file. """ dataParticles = self._getFileName('particlesScipion', iter=it) if clean: cleanPath(dataParticles) if not exists(dataParticles): partSet = em.SetOfParticles(filename=dataParticles) self._fillParticlesFromIter(partSet, it) partSet.write() partSet.close() else: partSet = em.SetOfParticles(filename=dataParticles) imgSet = self.inputParticles.get() partSet.copyInfo(imgSet) partSet.setAlignmentProj() return partSet