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()