def alignParticlesInLST(lstfile,outstack): import EMAN ### create a stack of particles aligned according to an LST file images=EMAN.readImages(lstfile,-1,-1,0) for i in images: i.edgeNormalize() i.rotateAndTranslate() if i.isFlipped(): i.hFlip() i.writeImage(outstack,-1)
def alignParticlesInLST(lstfile,outstack): import EMAN ### create a stack of particles aligned according to an LST file apDisplay.printMsg("aligning particles in '%s', saving to stack: %s"%(lstfile,outstack)) images=EMAN.readImages(lstfile,-1,-1,0) for i in images: i.edgeNormalize() i.rotateAndTranslate() if i.isFlipped(): i.hFlip() i.writeImage(outstack,-1)
def alignParticlesInLST(lstfile, outstack): import EMAN ### create a stack of particles aligned according to an LST file apDisplay.printMsg("aligning particles in '%s', saving to stack: %s" % (lstfile, outstack)) images = EMAN.readImages(lstfile, -1, -1, 0) for i in images: i.edgeNormalize() i.rotateAndTranslate() if i.isFlipped(): i.hFlip() i.writeImage(outstack, -1)
def main(): if len(sys.argv) != 3: print "Usage:: %s <input particles file name> <output particles file name>"%(sys.argv[0]) sys.exit(-1) input = sys.argv[1] output = sys.argv[2] stack=EMAN.readImages(input,-1,-1) i = 0 for image in stack: print "Working on image %s"%(i) new_image = speckle_filter(image) new_image.writeImage(output,i) i=i+1
def makeClassAverages(lst, outputstack, e, mask): import EMAN #align images in class print "creating class average from", lst, "to", outputstack images = EMAN.readImages(lst, -1, -1, 0) for image in images: image.rotateAndTranslate() if image.isFlipped(): image.hFlip() #make class average avg = EMAN.EMData() avg.makeMedian(images) #write class average avg.setRAlign(e) avg.setNImg(len(images)) avg.applyMask(mask, 0) avg.writeImage(outputstack, -1)
def makeClassAverages(lst, outputstack,e,mask): import EMAN #align images in class print "creating class average from",lst,"to",outputstack images=EMAN.readImages(lst,-1,-1,0) for image in images: image.rotateAndTranslate() if image.isFlipped(): image.hFlip() #make class average avg=EMAN.EMData() avg.makeMedian(images) #write class average avg.setRAlign(e) avg.setNImg(len(images)) avg.applyMask(mask,0) avg.writeImage(outputstack,-1)
def makeClassAverages(lst, outputstack, classdata, params): #align images in class images = EMAN.readImages(lst, -1, -1, 0) for image in images: image.rotateAndTranslate() if image.isFlipped(): image.hFlip() #make class average avg = EMAN.EMData() avg.makeMedian(images) #write class average e = EMAN.Euler() alt = classdata['euler1'] * math.pi / 180 az = classdata['euler2'] * math.pi / 180 phi = 0.0 e.setAngle(alt, az, phi) avg.setRAlign(e) avg.setNImg(len(images)) avg.applyMask(params['mask'], 0) avg.writeImage(outputstack, -1)
def makeClassAverages(lst, outputstack, classdata, params): # align images in class images = EMAN.readImages(lst, -1, -1, 0) for image in images: image.rotateAndTranslate() if image.isFlipped(): image.hFlip() # make class average avg = EMAN.EMData() avg.makeMedian(images) # write class average e = EMAN.Euler() alt = classdata["euler1"] * math.pi / 180 az = classdata["euler2"] * math.pi / 180 phi = 0.0 e.setAngle(alt, az, phi) avg.setRAlign(e) avg.setNImg(len(images)) avg.applyMask(params["mask"], 0) avg.writeImage(outputstack, -1)
def makeClassAverages(self, classlist, outputstack, classdata, maskrad): #align images in class #print classlist images = EMAN.readImages(classlist, -1, -1, 0) for image in images: image.rotateAndTranslate() if image.isFlipped(): image.hFlip() #make class average avg = EMAN.EMData() avg.makeMedian(images) #write class average e = EMAN.Euler() alt = classdata['euler1']*math.pi/180 az = classdata['euler2']*math.pi/180 phi = 0.0 #classdata['euler3']*math.pi/180 e.setAngle(alt, az, phi) avg.setRAlign(e) avg.setNImg(len(images)) avg.applyMask(maskrad, 0) avg.writeImage(outputstack,-1)
#!/usr/bin/env python import EMAN import sys from sys import argv import os import math RD = 180.0 / math.pi if len(argv) < 3: print "fsctest.py <refs> <ref #> <ptcl file> <ptcl #>" sys.exit(1) refs = EMAN.readImages(argv[1], -1, -1) ptcl = EMAN.EMData() ptcl.readImage(argv[3], int(argv[4])) ptcl.edgeNormalize() ptclf = ptcl.copy(0, 0) ptclf.vFlip() for i in refs: i.normalize() ali = ptcl.RTFAlign(refs[int(argv[2])], ptclf, 1) ali.refineAlign(i) fsc = (1.0 + ali.fscmp(refs[int(argv[2])], None)) * 500.0 print fsc
if __name__ == '__main__': # write command & time to emanlog if exists: if os.path.exists('refine.log'): cmd = string.join(sys.argv, ' ') apEMAN.writeEMANTime('refine.log', cmd) #Parse inputs args = sys.argv[1:] params = createDefaults() parseInput(args, params) if params['coranmask'] is None: params['coranmask'] = params['mask'] #Determine box size tmpimg = EMAN.readImages('start.hed', 1, 1) params['boxsize'] = tmpimg[0].xSize() #Set up for coran params['corandir'] = params['corandir'] + str(params['iter']) if os.path.exists(params['corandir']): print "WARNING!!! %s exists and is being overwritten" % params[ 'corandir'] shutil.rmtree(params['corandir']) os.mkdir(params['corandir']) else: os.mkdir(params['corandir']) classfile = 'cls.' + str(params['iter']) + '.tar' shutil.copy(classfile, os.path.join(params['corandir'], classfile)) shutil.copy('proj.hed', os.path.join(params['corandir'], 'proj.hed')) shutil.copy('proj.img', os.path.join(params['corandir'], 'proj.img'))
def createClassAverages(stack, projs, apmq, numprojs, boxsz, outclass="classes", rotated=False, shifted=False, dataext=".spi"): """ creates EMAN-style class average file "classes.hed" & "classes.img" and variance files "variances.hed" & "variances.img" from spider classification """ apFile.removeFile(outclass) outf = spyder.fileFilter(outclass) outvf = "tmpvar" apmqlist = readDocFile(apmq) mySpi = spyder.SpiderSession(dataext=dataext, logo=False, log=False) # create file containing the number of particles matched to each projection mySpi.toSpiderQuiet( "VO MQ", "0.0", spyder.fileFilter(apmq), str(numprojs), "cls*****", "numinclass", ) mySpi.close() os.remove("numinclass%s" % dataext) # create class average file mySpi = spyder.SpiderSession(dataext=dataext, logo=False, log=False) for i in range(0, numprojs): clsfile = readDocFile("cls%05d%s" % (i + 1, dataext)) if clsfile == []: apDisplay.printMsg("class %d has no particles" % (i + 1)) mySpi.toSpiderQuiet( "BL", "%s@%d" % (outf, (i + 1)), "(%d,%d)" % (boxsz, boxsz), "N", "(0.0)", ) mySpi.toSpiderQuiet( "BL", "%s@%d" % (outvf, (i + 1)), "(%d,%d)" % (boxsz, boxsz), "N", "(0.0)", ) else: mySpi.toSpiderQuiet("DE", "_2@") mySpi.toSpiderQuiet("MS", "_2@", "%d,%d,1" % (boxsz, boxsz), str(len(clsfile))) for p in range(0, len(clsfile)): mySpi.toSpiderQuiet("DE", "_1") # get the particle part = int(float(clsfile[p][2])) - 1 pimg = spyder.fileFilter(stack) + "@%d" % (part + 1) rot = float(apmqlist[part][4]) shx = float(apmqlist[part][5]) shy = float(apmqlist[part][6]) if shifted is True: shx = 0 shy = 0 if rotated is True: rot = 0 p_out = "_2@%d" % (p + 1) rotAndShiftImg(pimg, "_1", rot, shx, shy, inMySpi=mySpi) # mirror if int(float(apmqlist[part][2])) < 0: mirrorImg("_1", p_out, inMySpi=mySpi) else: mySpi.toSpiderQuiet("CP", "_1", p_out) if len(clsfile) == 1: mySpi.toSpiderQuiet("CP", "_2@1", "%s@%d" % (outf, (i + 1))) mySpi.toSpiderQuiet( "BL", "%s@%d" % (outvf, (i + 1)), "(%d,%d)" % (boxsz, boxsz), "N", "(0.0)", ) else: mySpi.toSpiderQuiet("AS R", "_2@*****", "1-%d" % len(clsfile), "A", "%s@%d" % (outf, (i + 1)), "%s@%d" % (outvf, i + 1)) mySpi.close() # convert the class averages to EMAN class averages # read classes & projections for EMAN classes output if os.path.exists('variances.hed'): os.remove('variances.hed') if os.path.exists('variances.img'): os.remove('variances.img') if os.path.exists('classes.hed'): os.remove('classes.hed') if os.path.exists('classes.img'): os.remove('classes.img') ### I would prefer to use apImagicFile.readImagic, writeImagic variances = EMAN.readImages(outvf + dataext, -1, -1, 0) averages = EMAN.readImages(outf + dataext, -1, -1, 0) projections = EMAN.readImages(projs, -1, -1, 0) for i in range(0, numprojs): # copy projection to class average file projections[i].writeImage('classes.hed') projections[i].writeImage('variances.hed') # get num of particles in class clsfile = readDocFile("cls%05d%s" % (i + 1, dataext)) averages[i].setNImg(len(clsfile)) averages[i].writeImage('classes.hed', -1) variances[i].setNImg(len(clsfile)) variances[i].writeImage('variances.hed', -1) os.remove("cls%05d%s" % (i + 1, dataext)) os.remove(outf + dataext) return
if __name__== '__main__': # write command & time to emanlog if exists: if os.path.exists('refine.log'): cmd = string.join(sys.argv,' ') apEMAN.writeEMANTime('refine.log',cmd) #Parse inputs args=sys.argv[1:] params=createDefaults() parseInput(args,params) if params['coranmask'] is None: params['coranmask'] = params['mask'] #Determine box size tmpimg=EMAN.readImages('start.hed',1,1) params['boxsize']=tmpimg[0].xSize() #Set up for coran params['corandir']=params['corandir']+str(params['iter']) if os.path.exists(params['corandir']): print "WARNING!!! %s exists and is being overwritten" % params['corandir'] shutil.rmtree(params['corandir']) os.mkdir(params['corandir']) else: os.mkdir(params['corandir']) classfile='cls.'+str(params['iter'])+'.tar' shutil.copy(classfile,os.path.join(params['corandir'],classfile)) shutil.copy('proj.hed',os.path.join(params['corandir'],'proj.hed')) shutil.copy('proj.img',os.path.join(params['corandir'],'proj.img')) os.chdir(params['corandir'])
def createClassAverages(stack,projs,apmq,numprojs,boxsz,outclass="classes",rotated=False,shifted=False,dataext=".spi"): """ creates EMAN-style class average file "classes.hed" & "classes.img" and variance files "variances.hed" & "variances.img" from spider classification """ apFile.removeFile(outclass) outf=spyder.fileFilter(outclass) outvf="tmpvar" apmqlist = readDocFile(apmq) mySpi = spyder.SpiderSession(dataext=dataext, logo=False, log=False) # create file containing the number of particles matched to each projection mySpi.toSpiderQuiet( "VO MQ", "0.0", spyder.fileFilter(apmq), str(numprojs), "cls*****", "numinclass", ) mySpi.close() os.remove("numinclass%s" % dataext) # create class average file mySpi = spyder.SpiderSession(dataext=dataext, logo=False, log=False) for i in range(0,numprojs): clsfile = readDocFile("cls%05d%s" % (i+1,dataext)) if clsfile == []: apDisplay.printMsg("class %d has no particles" %(i+1)) mySpi.toSpiderQuiet("BL","%s@%d" % (outf,(i+1)),"(%d,%d)" % (boxsz,boxsz),"N","(0.0)",) mySpi.toSpiderQuiet("BL","%s@%d" % (outvf,(i+1)),"(%d,%d)" % (boxsz,boxsz),"N","(0.0)",) else: mySpi.toSpiderQuiet("DE","_2@") mySpi.toSpiderQuiet("MS","_2@","%d,%d,1" % (boxsz,boxsz), str(len(clsfile))) for p in range(0,len(clsfile)): mySpi.toSpiderQuiet("DE","_1") # get the particle part = int(float(clsfile[p][2]))-1 pimg = spyder.fileFilter(stack)+"@%d"%(part+1) rot=float(apmqlist[part][4]) shx=float(apmqlist[part][5]) shy=float(apmqlist[part][6]) if shifted is True: shx=0 shy=0 if rotated is True: rot=0 p_out="_2@%d" % (p+1) rotAndShiftImg( pimg, "_1", rot, shx, shy, inMySpi=mySpi ) # mirror if int(float(apmqlist[part][2])) < 0: mirrorImg("_1",p_out,inMySpi=mySpi) else: mySpi.toSpiderQuiet("CP","_1",p_out) if len(clsfile) == 1: mySpi.toSpiderQuiet("CP","_2@1","%s@%d" % (outf,(i+1))) mySpi.toSpiderQuiet("BL","%s@%d" % (outvf,(i+1)),"(%d,%d)" % (boxsz,boxsz),"N","(0.0)",) else: mySpi.toSpiderQuiet("AS R","_2@*****","1-%d" % len(clsfile), "A","%s@%d" % (outf,(i+1)),"%s@%d" % (outvf,i+1)) mySpi.close() # convert the class averages to EMAN class averages # read classes & projections for EMAN classes output if os.path.exists('variances.hed'): os.remove('variances.hed') if os.path.exists('variances.img'): os.remove('variances.img') if os.path.exists('classes.hed'): os.remove('classes.hed') if os.path.exists('classes.img'): os.remove('classes.img') ### I would prefer to use apImagicFile.readImagic, writeImagic variances = EMAN.readImages(outvf+dataext,-1,-1,0) averages = EMAN.readImages(outf+dataext,-1,-1,0) projections=EMAN.readImages(projs,-1,-1,0) for i in range (0,numprojs): # copy projection to class average file projections[i].writeImage('classes.hed') projections[i].writeImage('variances.hed') # get num of particles in class clsfile=readDocFile("cls%05d%s" % (i+1,dataext)) averages[i].setNImg(len(clsfile)) averages[i].writeImage('classes.hed',-1) variances[i].setNImg(len(clsfile)) variances[i].writeImage('variances.hed',-1) os.remove("cls%05d%s" % (i+1,dataext)) os.remove(outf+dataext) return
for i in argv[1:]: s = i.split("=") if s[0] == "classes": Ncls = int(s[1]) elif s[0] == "average": averageout = s[1] elif s[0] == "clsfiles": clsfiles = 1 elif s[0] == "listout": listout = s[1] elif s[0] == "nosingle": nosingle = 1 elif s[0] == "stack": data = EMAN.readImages(s[1], -1, -1) stackname = s[1] elif s[0] == "list": fin = open(s[1], "r") fsp = fin.readlines() fin.close() for i in fsp: x = EMAN.EMData() x.readImage(i.strip()) data.append(x) else: print "Unknown argument ", i exit(1) if len(data) == 0: print "No data to classify. Please specify stack= or list=."