Exemplo n.º 1
0
 def __init__(self, volfile, **kwargs):
     print("on chimera projection client")
     ChimeraAngDistClient.__init__(self, volfile, **kwargs)
     self.projection = xmipp.Image()
     self.projection.setDataType(md.DT_DOUBLE)
     #0.5 ->  Niquiest frequency
     #2 -> bspline interpolation
     size = self.kwargs.get('size', None)
     defaultSize = self.xdim if self.xdim > 128 else 128
     self.size = size if size else defaultSize
     paddingFactor = self.kwargs.get('paddingFactor', 1)
     maxFreq = self.kwargs.get('maxFreq', 0.5)
     splineDegree = self.kwargs.get('splineDegree', 2)
     self.fourierprojector = xmipp.FourierProjector(self.image,
                                                    paddingFactor, maxFreq,
                                                    splineDegree)
     self.fourierprojector.projectVolume(self.projection, 0, 0, 0)
     self.showjPort = self.kwargs.get('showjPort', None)
     self.iw = ImageWindow(filename=os.path.basename(volfile),
                           image=self.projection,
                           dim=self.size,
                           label="Projection")
     self.iw.updateData(flipud(self.projection.getData()))
     if self.showjPort:
         self.showjThread = Thread(target=self.listenShowJ)
         self.showjThread.daemon = True
         self.showjThread.start()
     self.iw.root.protocol("WM_DELETE_WINDOW", self.exitClient)
     self.iw.show()
Exemplo n.º 2
0
    def convertInputStep(self, volName):
        # Read volume and convert to DOUBLE
        self.vol = xmipp.Image(volName)
        self.vol.convert2DataType(xmipp.DT_DOUBLE)
        # Mask volume if needed
        if self.refMask.get() is not None:
            maskName = getImageLocation(self.refMask.get())
            self.mask = xmipp.Image(maskName)
            self.mask.convert2DataType(xmipp.DT_DOUBLE)
            self.vol.inplaceMultiply(self.mask)
        padding = 2
        maxFreq = 0.5
        splineDegree = 3
        ###
        self.fourierProjectVol = xmipp.FourierProjector(
            self.vol, padding, maxFreq, splineDegree)
        ###
        partSet = self.inputParticles.get()
        nPart = len(partSet)
        numberOfTasks = min(nPart, max(self.numberOfThreads.get() - 1, 1))
        taskSize = nPart / numberOfTasks
        md = xmipp.MetaData()

        # Convert angles and shifts from volume system of coordinates to
        # projection system of coordinates
        mdCount = 0

        for index, part in enumerate(partSet):
            objId = md.addObject()
            imgRow = XmippMdRow()
            particleToRow(part, imgRow)
            shifts, angles = geometryFromMatrix(
                part.getTransform().getMatrix(), True)

            imgRow.setValue(xmipp.MDL_SHIFT_X, -shifts[0])
            imgRow.setValue(xmipp.MDL_SHIFT_Y, -shifts[1])
            imgRow.setValue(xmipp.MDL_SHIFT_Z, 0.)
            imgRow.setValue(xmipp.MDL_ANGLE_ROT, angles[0])
            imgRow.setValue(xmipp.MDL_ANGLE_TILT, angles[1])
            imgRow.setValue(xmipp.MDL_ANGLE_PSI, angles[2])

            imgRow.writeToMd(md, objId)

            # Write a new metadata every taskSize number of elements
            # except in the last chunk where we want to add also the
            # remainder and the condition is the last element
            if ((index % taskSize == taskSize - 1
                 and mdCount < numberOfTasks - 1) or index == nPart - 1):
                md.write(self._getInputParticlesSubsetFn(mdCount))
                md.clear()
                mdCount += 1

        x, y, _ = partSet.getDim()
        xmipp.createEmptyFile(self._getProjGalleryFn(), x, y, 1, nPart)