Example #1
0
def boxMaskStack(bmstackf, partdatas, box, xmask, ymask, falloff, imask=None, norotate=False):
        from appionlib.apSpider import operations
        from appionlib import apEMAN
        import os

        # create blank image for mask using SPIDER
        maskfile = "boxmask.spi"
        operations.createBoxMask(maskfile,box,xmask,ymask,falloff,imask)

        # convert mask to MRC
        apEMAN.executeEmanCmd("proc2d boxmask.spi boxmask.mrc",verbose=False,showcmd=False)
        os.remove("boxmask.spi")

        maskarray = mrc.read("boxmask.mrc")

        # box particles
        maskedparts = []
        for i in range(len(partdatas)):
                if norotate is True:
                        rotatemask = maskarray
                else:
                        angle = (-partdatas[i]['angle'])-90
                        rotatemask = ndimage.rotate(maskarray, angle=angle, reshape=False, order=1)
                maskedparts.append(rotatemask)

        # write to stack
        apImagicFile.writeImagic(maskedparts, bmstackf)
        os.remove("boxmask.mrc")
        return bmstackf
	def boxMask(self,infile,outfile,spirots=None):
		from appionlib.apSpider import operations
		# boxmask the particles
		apDisplay.printMsg("masking the particles with a rectangular box")

		nump = apStack.getNumberStackParticlesFromId(self.params['stackid'])
		box = self.stackdata['boxsize']
		apix = self.stackdata['pixelsize']*1e10
		if self.params['mask'] is None:
			mask = box/2-2
		else:
			mask = int(self.params['mask']/apix)
		imask = int(self.params['imask']/apix)
		length = int(self.params['length']/apix)
		falloff = self.params['falloff']/apix

		mask -= falloff/2
		length = (length/2)-(falloff/2)
		
		# create blank image for mask
		maskfile = "boxmask.spi"
		operations.createBoxMask(maskfile,box,mask,length,falloff,imask)
		mySpi = spyder.SpiderSession(dataext=".spi", logo=False, log=False)
		mySpi.toSpiderQuiet("CP",
			spyder.fileFilter(maskfile),"_4")
		mySpi.toSpider("do x10=1,%i"%nump)
		if self.params['vertical'] is not True:
			mySpi.toSpider("UD IC x10,x30",
				spyder.fileFilter(spirots),
				"x30 = -1*x30",
				"RT B",
				"_4",
				"_9",
				"(x30)",
				"(0)",
				"MU",
				spyder.fileFilter(infile)+"@{******x10}",
				"_9")
		else:
			mySpi.toSpider("MU",
				spyder.fileFilter(infile)+"@{******x10}",
				"_4")
	
		mySpi.toSpider(spyder.fileFilter(outfile)+"@{******x10}",
			"*",
			"enddo")
		if self.params['vertical'] is not True:
			mySpi.toSpider("UD ICE",spyder.fileFilter(spirots))
		mySpi.close()
    def boxMask(self, infile, outfile, spirots=None):
        from appionlib.apSpider import operations
        # boxmask the particles
        apDisplay.printMsg("masking the particles with a rectangular box")

        nump = apStack.getNumberStackParticlesFromId(self.params['stackid'])
        box = self.stackdata['boxsize']
        apix = self.stackdata['pixelsize'] * 1e10
        if self.params['mask'] is None:
            mask = box / 2 - 2
        else:
            mask = int(self.params['mask'] / apix)
        imask = int(self.params['imask'] / apix)
        length = int(self.params['length'] / apix)
        falloff = self.params['falloff'] / apix

        mask -= falloff / 2
        length = (length / 2) - (falloff / 2)

        # create blank image for mask
        maskfile = "boxmask.spi"
        operations.createBoxMask(maskfile, box, mask, length, falloff, imask)
        mySpi = spyder.SpiderSession(dataext=".spi", logo=False, log=False)
        mySpi.toSpiderQuiet("CP", spyder.fileFilter(maskfile), "_4")
        mySpi.toSpider("do x10=1,%i" % nump)
        if self.params['vertical'] is not True:
            mySpi.toSpider("UD IC x10,x30", spyder.fileFilter(spirots),
                           "x30 = -1*x30", "RT B", "_4", "_9", "(x30)", "(0)",
                           "MU",
                           spyder.fileFilter(infile) + "@{******x10}", "_9")
        else:
            mySpi.toSpider("MU",
                           spyder.fileFilter(infile) + "@{******x10}", "_4")

        mySpi.toSpider(
            spyder.fileFilter(outfile) + "@{******x10}", "*", "enddo")
        if self.params['vertical'] is not True:
            mySpi.toSpider("UD ICE", spyder.fileFilter(spirots))
        mySpi.close()