def convertInputStep(self): """ Read the input metadatata. """ # Get the converted input micrographs in Xmipp format makePath(self._getExtraPath("untilted")) makePath(self._getExtraPath("tilted")) uSet = self.untiltedSet.get() tSet = self.tiltedSet.get() # Get the untilted and tilted coordinates, depending on the input type if isinstance(uSet, SetOfParticles): uCoords = uSet.getCoordinates() tCoords = tSet.getCoordinates() # If there are not Coordinates associated to particles # we need to create and fill the set of coordinates if uCoords is None or tCoords is None: micTiltedPairs = self.inputMicrographsTiltedPair.get() uCoords = self._coordsFromParts(micTiltedPairs.getUntilted(), uSet, '_untilted') tCoords = self._coordsFromParts(micTiltedPairs.getTilted(), tSet, '_tilted') else: uCoords = uSet tCoords = tSet writeSetOfCoordinates(self._getExtraPath("untilted"), uCoords) writeSetOfCoordinates(self._getExtraPath("tilted"), tCoords)
def writePosFilesStep(self): """ Write the pos file for each micrograph in metadata format (both untilted and tilted). """ writeSetOfCoordinates(self._getExtraPath(), self.inputCoords.getUntilted(), scale=self.getBoxScale()) writeSetOfCoordinates(self._getExtraPath(), self.inputCoords.getTilted(), scale=self.getBoxScale()) # We need to find the mapping by micName (without ext) between the # micrographs in the SetOfCoordinates and the Other micrographs if self._micsOther(): micDict = {} # create tmp set with all mics from coords set coordMics = SetOfMicrographs(filename=':memory:') coordMics.copyInfo(self.inputCoords.getUntilted().getMicrographs()) for micU, micT in izip( self.inputCoords.getUntilted().getMicrographs(), self.inputCoords.getTilted().getMicrographs()): micU.cleanObjId() micT.cleanObjId() coordMics.append(micU) coordMics.append(micT) for mic in coordMics: micBase = pwutils.removeBaseExt(mic.getFileName()) micPos = self._getExtraPath(micBase + ".pos") micDict[pwutils.removeExt(mic.getMicName())] = micPos # now match micDict and inputMics if any( pwutils.removeExt(mic.getMicName()) in micDict for mic in self.inputMics): micKey = lambda mic: pwutils.removeExt(mic.getMicName()) else: raise Exception( 'Could not match input micrographs and coordinates ' 'by micName.') for mic in self.inputMics: # micrograph from input (other) mk = micKey(mic) if mk in micDict: micPosCoord = micDict[mk] if exists(micPosCoord): micBase = pwutils.removeBaseExt(mic.getFileName()) micPos = self._getExtraPath(micBase + ".pos") if micPos != micPosCoord: self.info('Moving %s -> %s' % (micPosCoord, micPos)) pwutils.moveFile(micPosCoord, micPos)
def writePosFilesStep(self): """ Write the pos file for each micrograph in metadata format (both untilted and tilted). """ writeSetOfCoordinates(self._getExtraPath(), self.inputCoords.getUntilted(), scale=self.getBoxScale()) writeSetOfCoordinates(self._getExtraPath(), self.inputCoords.getTilted(), scale=self.getBoxScale()) # We need to find the mapping by micName (without ext) between the # micrographs in the SetOfCoordinates and the Other micrographs if self._micsOther(): micDict = {} # create tmp set with all mics from coords set coordMics = SetOfMicrographs(filename=':memory:') coordMics.copyInfo(self.inputCoords.getUntilted().getMicrographs()) for micU, micT in izip(self.inputCoords.getUntilted().getMicrographs(), self.inputCoords.getTilted().getMicrographs()): micU.cleanObjId() micT.cleanObjId() coordMics.append(micU) coordMics.append(micT) for mic in coordMics: micBase = pwutils.removeBaseExt(mic.getFileName()) micPos = self._getExtraPath(micBase + ".pos") micDict[pwutils.removeExt(mic.getMicName())] = micPos # now match micDict and inputMics if any(pwutils.removeExt(mic.getMicName()) in micDict for mic in self.inputMics): micKey = lambda mic: pwutils.removeExt(mic.getMicName()) else: raise Exception('Could not match input micrographs and coordinates ' 'by micName.') for mic in self.inputMics: # micrograph from input (other) mk = micKey(mic) if mk in micDict: micPosCoord = micDict[mk] if exists(micPosCoord): micBase = pwutils.removeBaseExt(mic.getFileName()) micPos = self._getExtraPath(micBase + ".pos") if micPos != micPosCoord: self.info('Moving %s -> %s' % (micPosCoord, micPos)) pwutils.moveFile(micPosCoord, micPos)
def convertInputStep(self): """ Read the input metadatata. """ # Get the converted input micrographs in Xmipp format makePath(self._getExtraPath("untilted")) makePath(self._getExtraPath("tilted")) if self.typeOfSet.get() == TYPE_PARTICLES: U_set = self.untiltPar.get().getCoordinates() T_set = self.tiltPar.get().getCoordinates() if (U_set or T_set) is None: U_set = self._createSetOfCoordinates(self.tiltpair.get().getUntilted(), suffix='_untilted') T_set = self._createSetOfCoordinates(self.tiltpair.get().getTilted(), suffix='_tilted') untiltPar = self.untiltPar.get() for particle_u in untiltPar: newCoord = particle_u.getCoordinate().clone() newCoord.copyObjId(particle_u) U_set.append(newCoord) # tiltPar = self.tiltPar.get() for particle_t in tiltPar: newCoord = particle_t.getCoordinate().clone() newCoord.copyObjId(particle_t) T_set.append(newCoord) aux = self.untiltPar.get() aux2 = aux[1] bos, y_, z_ = aux2.getDim() U_set.setBoxSize(bos) T_set.setBoxSize(bos) else: U_set = self.untiltCoor.get() T_set = self.tiltCoor.get() writeSetOfCoordinates(self._getExtraPath("untilted"), U_set) writeSetOfCoordinates(self._getExtraPath("tilted"), T_set)
def writePosFilesStep(self): """ Write the pos file for each micrograph on metadata format. """ #self.posFiles = writeSetOfCoordinates(self._getExtraPath(), self.inputCoords) writeSetOfCoordinates(self._getExtraPath(), self.inputCoords) # We need to find the mapping (either by micName or micId) # between the micrographs in the SetOfCoordinates and # the micrographs (if we are in a different case than 'same as picking' if self.downsampleType != SAME_AS_PICKING: micDict = {} coordMics = self.inputCoords.getMicrographs() for mic in coordMics: micBase = removeBaseExt(mic.getFileName()) micPos = self._getExtraPath(micBase + ".pos") micDict[mic.getMicName()] = micPos micDict[mic.getObjId()] = micPos if any(mic.getMicName() in micDict for mic in self.inputMics): micKey = lambda mic: mic.getMicName() elif any(mic.getObjId() in micDict for mic in self.inputMics): self.warning( 'Could not match input micrographs and coordinates ' 'micrographs by micName, using micId.') micKey = lambda mic: mic.getObjId() else: raise Exception( 'Could not match input micrographs and coordinates ' 'neither by micName or micId.') for mic in self.inputMics: # micrograph from input (other) mk = micKey(mic) if mk in micDict: micPosCoord = micDict[mk] if exists(micPosCoord): micBase = removeBaseExt(mic.getFileName()) micPos = self._getExtraPath(micBase + ".pos") if micPos != micPosCoord: self.info('Moving %s -> %s' % (micPosCoord, micPos)) moveFile(micPosCoord, micPos)
def writePosFilesStep(self): """ Write the pos file for each micrograph on metadata format. """ writeSetOfCoordinates(self._getExtraPath(), self.inputCoords, scale=self.getBoxScale()) # We need to find the mapping (either by micName (without ext) or micId) # between the micrographs in the SetOfCoordinates and # the Other micrographs if necessary if self._micsOther(): micDict = {} coordMics = self.inputCoords.getMicrographs() for mic in coordMics: micBase = pwutils.removeBaseExt(mic.getFileName()) micPos = self._getExtraPath(micBase + ".pos") micDict[pwutils.removeBaseExt(mic.getMicName())] = micPos micDict[mic.getObjId()] = micPos if any(pwutils.removeBaseExt(mic.getMicName()) in micDict for mic in self.inputMics): micKey = lambda mic: pwutils.removeBaseExt(mic.getMicName()) elif any(mic.getObjId() in micDict for mic in self.inputMics): self.warning('Could not match input micrographs and coordinates' ' micrographs by micName, using micId.') micKey = lambda mic: mic.getObjId() else: raise Exception('Could not match input micrographs and ' 'coordinates neither by micName or micId.') for mic in self.inputMics: # micrograph from input (other) mk = micKey(mic) if mk in micDict: micPosCoord = micDict[mk] if exists(micPosCoord): micBase = pwutils.removeBaseExt(mic.getFileName()) micPos = self._getExtraPath(micBase + ".pos") if micPos != micPosCoord: self.info('Moving %s -> %s' % (micPosCoord, micPos)) pwutils.moveFile(micPosCoord, micPos)
def writePosFilesStep(self): """ Write the pos file for each micrograph on metadata format. """ #self.posFiles = writeSetOfCoordinates(self._getExtraPath(), self.inputCoords) writeSetOfCoordinates(self._getExtraPath(), self.inputCoords) # We need to find the mapping (either by micName or micId) # between the micrographs in the SetOfCoordinates and # the micrographs (if we are in a different case than 'same as picking' if self.downsampleType != SAME_AS_PICKING: micDict = {} coordMics = self.inputCoords.getMicrographs() for mic in coordMics: micBase = removeBaseExt(mic.getFileName()) micPos = self._getExtraPath(micBase + ".pos") micDict[mic.getMicName()] = micPos micDict[mic.getObjId()] = micPos if any(mic.getMicName() in micDict for mic in self.inputMics): micKey = lambda mic: mic.getMicName() elif any(mic.getObjId() in micDict for mic in self.inputMics): self.warning('Could not match input micrographs and coordinates ' 'micrographs by micName, using micId.') micKey = lambda mic: mic.getObjId() else: raise Exception('Could not match input micrographs and coordinates ' 'neither by micName or micId.') for mic in self.inputMics: # micrograph from input (other) mk = micKey(mic) if mk in micDict: micPosCoord = micDict[mk] if exists(micPosCoord): micBase = removeBaseExt(mic.getFileName()) micPos = self._getExtraPath(micBase + ".pos") if micPos != micPosCoord: self.info('Moving %s -> %s' % (micPosCoord, micPos)) moveFile(micPosCoord, micPos)
def convertInputStep(self): inputParticles = self.inputParticles.get() firstCoord = inputParticles.getFirstItem().getCoordinate() self.hasMicName = firstCoord.getMicName() is not None inputMics = self._getMicrographs() self.alignType = inputParticles.getAlignment() self.downFactor = self.ctfDownFactor.get() # create a tmp set for matching mics self.matchingMics = self._createSetOfMicrographs(suffix='_tmp') self.matchingMics.copyInfo(inputMics) if self.downFactor != 1.: self.matchingMics.setDownsample(self.downFactor) # create a tmp set for coords coords = self._createSetOfCoordinates(inputMics, suffix='_tmp') newCoord = Coordinate() self.scale = inputParticles.getSamplingRate() / inputMics.getSamplingRate() if self.scale != 1.0: print "Scaling coordinates by a factor *%0.2f*" % self.scale # Create the micrograph dicts micDict = {} # dict with micName or micId micBaseDict = {} # dict with micName (just basename) micKey2 = None insertedMics = {} for mic in inputMics: if self.hasMicName: micKey = mic.getMicName() micKey2 = pwutils.removeBaseExt(micKey) else: micKey = mic.getObjId() if micKey in micDict: print ">>> ERROR: micrograph key %s is duplicated!" % micKey print " Used in micrographs:" print " - %s" % micDict[micKey].getLocation() print " - %s" % mic.getLocation() raise Exception("Micrograph key %s is duplicated!" % micKey) micDict[micKey] = mic.clone() if self.hasMicName: micBaseDict[micKey2] = mic.clone() # match the mic from coord with micDict for particle in inputParticles: coord = particle.getCoordinate() or None if coord is None: print "Skipping particle, coordinates not found" continue if self.hasMicName: micKey = coord.getMicName() micKey2 = pwutils.removeBaseExt(micKey) else: micKey = coord.getMicId() # find the mapping by micName (with or without ext) or micId mic = micDict.get(micKey, None) or micBaseDict.get(micKey2, None) if mic is None: print "Skipping particle, key %s not found" % micKey else: newCoord.copyObjId(particle) x, y = coord.getPosition() if self.applyShifts: shifts = getShifts(particle.getTransform(), self.alignType) xCoor, yCoor = x - int(shifts[0]), y - int(shifts[1]) newCoord.setPosition(xCoor * self.scale, yCoor * self.scale) else: newCoord.setPosition(x * self.scale, y * self.scale) newCoord.setMicrograph(mic) coords.append(newCoord) if mic.getObjId() not in insertedMics: insertedMics[mic.getObjId()] = mic self.matchingMics.append(mic) ih = em.ImageHandler() # We convert matching micrographs if they are not *.mrc for mic in self.matchingMics: # Create micrograph dir micName = mic.getFileName() micDir = self._getTmpPath(pwutils.removeBaseExt(micName)) pwutils.makePath(micDir) outMic = pwutils.join(micDir, pwutils.replaceBaseExt(micName, 'mrc')) if self.downFactor != 1.: ih.scaleFourier(micName, outMic, self.downFactor) sps = inputMics.getScannedPixelSize() * self.downFactor self._params['scannedPixelSize'] = sps else: if micName.endswith('.mrc'): pwutils.createLink(micName, outMic) else: ih.convert(micName, outMic) # Write out coordinate files and sets writeSetOfCoordinates(self._getTmpPath(), coords, self.matchingMics) coords.clear() pwutils.cleanPath(coords.getFileName()) self.matchingMics.write() self.matchingMics.close()
def writePosFilesStep(self): """ Write the pos file for each micrograph on metadata format. """ #self.posFiles = writeSetOfCoordinates(self._getExtraPath(), self.inputCoords) writeSetOfCoordinates(self._getExtraPath(), self.inputCoords)
def writePosFilesStep(self): """ Write the pos file for each micrograph on metadata format (both untilted and tilted). """ writeSetOfCoordinates(self._getExtraPath(), self.inputCoordinatesTiltedPairs.get().getUntilted()) writeSetOfCoordinates(self._getExtraPath(), self.inputCoordinatesTiltedPairs.get().getTilted())
def convertInputStep(self): inputParticles = self.inputParticles.get() firstCoord = inputParticles.getFirstItem().getCoordinate() self.hasMicName = firstCoord.getMicName() is not None inputMics = self._getMicrographs() self.alignType = inputParticles.getAlignment() self.downFactor = self.ctfDownFactor.get() # create a tmp set for matching mics self.matchingMics = self._createSetOfMicrographs(suffix='_tmp') self.matchingMics.copyInfo(inputMics) if self.downFactor != 1.: self.matchingMics.setDownsample(self.downFactor) # create a tmp set for coords coords = self._createSetOfCoordinates(inputMics, suffix='_tmp') newCoord = Coordinate() self.scale = inputParticles.getSamplingRate( ) / inputMics.getSamplingRate() if self.scale != 1.0: print "Scaling coordinates by a factor *%0.2f*" % self.scale # Create the micrograph dicts micDict = {} # dict with micName or micId micBaseDict = {} # dict with micName (just basename) micKey2 = None insertedMics = {} for mic in inputMics: if self.hasMicName: micKey = mic.getMicName() micKey2 = pwutils.removeBaseExt(micKey) else: micKey = mic.getObjId() if micKey in micDict: print ">>> ERROR: micrograph key %s is duplicated!" % micKey print " Used in micrographs:" print " - %s" % micDict[micKey].getLocation() print " - %s" % mic.getLocation() raise Exception("Micrograph key %s is duplicated!" % micKey) micDict[micKey] = mic.clone() if self.hasMicName: micBaseDict[micKey2] = mic.clone() # match the mic from coord with micDict for particle in inputParticles: coord = particle.getCoordinate() or None if coord is None: print "Skipping particle, coordinates not found" continue if self.hasMicName: micKey = coord.getMicName() micKey2 = pwutils.removeBaseExt(micKey) else: micKey = coord.getMicId() # find the mapping by micName (with or without ext) or micId mic = micDict.get(micKey, None) or micBaseDict.get(micKey2, None) if mic is None: print "Skipping particle, key %s not found" % micKey else: newCoord.copyObjId(particle) x, y = coord.getPosition() if self.applyShifts: shifts = getShifts(particle.getTransform(), self.alignType) xCoor, yCoor = x - int(shifts[0]), y - int(shifts[1]) newCoord.setPosition(xCoor * self.scale, yCoor * self.scale) else: newCoord.setPosition(x * self.scale, y * self.scale) newCoord.setMicrograph(mic) coords.append(newCoord) if mic.getObjId() not in insertedMics: insertedMics[mic.getObjId()] = mic self.matchingMics.append(mic) ih = em.ImageHandler() # We convert matching micrographs if they are not *.mrc for mic in self.matchingMics: # Create micrograph dir micName = mic.getFileName() micDir = self._getTmpPath(pwutils.removeBaseExt(micName)) pwutils.makePath(micDir) outMic = pwutils.join(micDir, pwutils.replaceBaseExt(micName, 'mrc')) if self.downFactor != 1.: ih.scaleFourier(micName, outMic, self.downFactor) sps = inputMics.getScannedPixelSize() * self.downFactor self._params['scannedPixelSize'] = sps else: if micName.endswith('.mrc'): pwutils.createLink(micName, outMic) else: ih.convert(micName, outMic) # Write out coordinate files and sets writeSetOfCoordinates(self._getTmpPath(), coords, self.matchingMics) coords.clear() pwutils.cleanPath(coords.getFileName()) self.matchingMics.write() self.matchingMics.close()