def numberParticlesInStack(stackname, startnum=0, verbose=True):
    ### new faster methond
    apImagicFile.numberStackFile(stackname, startnum=0)
    return

    # store the particle number in the stack header
    # NOTE!!! CONFORMS TO EMAN CONVENTION, STARTS AT 0!!!
    import EMAN
    t0 = time.time()
    apDisplay.printMsg("saving particle numbers to stack header")
    n = EMAN.fileCount(stackname)[0]
    im = EMAN.EMData()
    i = 0
    back = "\b\b\b\b\b\b\b"
    while i < n:
        j = startnum + i
        im.readImage(stackname, i)
        im.setNImg(j)
        im.writeImage(stackname, i)
        if verbose is True and i % 100 == 0:
            sys.stderr.write(back + back + back + str(j) + " of " + str(n))
        i += 1
    sys.stderr.write("\n")
    apDisplay.printMsg("finished in " + apDisplay.timeString(time.time() - t0))
    return
def writeImageToImage(instack, inn, outstack, outn=-1, particles=0):
    import EMAN
    # copy an image from an input stack to another one
    img = EMAN.EMData()
    img.readImage(instack, inn)
    img.setNImg(particles)
    img.writeImage(outstack, outn)
    return
def writeBlankImage(outfile, boxsize, place, type=None):
    import EMAN
    a = EMAN.EMData()
    a.setSize(boxsize, boxsize)
    a.zero()
    if type == 'spider':
        a.writeImage(outfile, place, EMAN.EMData.SINGLE_SPIDER)
    else:
        a.writeImage(outfile, place)
    return
def writeStackParticlesToFile(stackname, filename):
    import EMAN
    # write out the particle numbers from imagic header to a file
    # NOTE!!! CONFORMS TO EMAN CONVENTION, STARTS AT 0!!!
    apDisplay.printMsg("saving list of saved particles to:")
    apDisplay.printMsg(filename)
    f = open(filename, 'w')
    n = EMAN.fileCount(stackname)[0]
    im = EMAN.EMData()
    for i in range(n):
        im.readImage(stackname, i)
        f.write(str(im.NImg()) + "\n")
    f.close()
    return
def getClassInfo(classes):
    import EMAN
    # read a classes.*.img file, get # of images
    imgnum, imgtype = EMAN.fileCount(classes)
    img = EMAN.EMData()
    img.readImage(classes, 0, 1)

    # for projection images, get eulers
    projeulers = []
    for i in range(imgnum):
        img.readImage(classes, i, 1)
        e = img.getEuler()
        alt = e.thetaMRC() * 180. / math.pi
        az = e.phiMRC() * 180. / math.pi
        phi = e.omegaMRC() * 180. / math.pi
        eulers = [alt, az, phi]
        if i % 2 == 0:
            projeulers.append(eulers)
    return projeulers
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 checkStackNumbering(stackname):
    import EMAN
    # check that the numbering is stored in the NImg parameter
    apDisplay.printMsg("checking that original stack is numbered")
    n = EMAN.fileCount(stackname)[0]
    im = EMAN.EMData()
    im.readImage(stackname, n - 1)

    # if last particle is not numbered with same value as # of particles,
    # renumber the entire stack
    if n - 1 != im.NImg():
        apDisplay.printWarning(
            "Original stack is not numbered! numbering now...")
        # check that the stack exists in a writable directory and is not read-only
        if os.access(stackname, os.W_OK) is True:
            numberParticlesInStack(stackname, startnum=0, verbose=True)
        else:
            apDisplay.printWarning(
                "old stack header exists in a READ-only directory and cannot be numbered according to EMAN"
            )
    return
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)
# get eulers from proj.img file

import sys, os
from math import pi
try:
	import EMAN
except ImportError:
	print "EMAN module did not get imported"

if __name__ == "__main__":
	if len(sys.argv) !=3:
		print "Usage: getProjEulers.py <infile> <outfile>\n"
		sys.exit(1)

	projfile = sys.argv[1]
	outfile = sys.argv[2]

	out = open(outfile, "w")

	count,imgtype = EMAN.fileCount(projfile)
	imgs = EMAN.EMData()
	imgs.readImage(projfile,0,1)
	for i in range(count):
		imgs.readImage(projfile,i,1)
		e = imgs.getEuler()
		alt = e.alt()*180./pi
		az = e.az()*180./pi
		phi = e.phi()*180./pi
		out.write("%i\t%f\t%f\t%f\n" % (i,alt,az,phi))
	out.close()
#!/usr/bin/env python

# this will save the particle stack number into the header of a stack.
# use this if you want to run cenalignint, and keep track of the particles.
# NOTE!!! CONFORMS TO EMAN CONVENTION, STARTS AT 0!!!!

import sys
try:
    import EMAN
except ImportError:
    print "EMAN module did not get imported"

if __name__ == "__main__":

    if len(sys.argv) < 2:
        print "usage: renumber.py [filename]"
        sys.exit()

    filename = sys.argv[1]

    n = EMAN.fileCount(filename)[0]
    im = EMAN.EMData()
    for i in range(n):
        im.readImage(filename, i)
        im.setNImg(i)
        im.writeImage(filename, i)
        print i
    def start(self):
        self.params['outputstack'] = os.path.join(self.params['rundir'],
                                                  self.params['stackname'])
        particles, self.params['refineiter'] = getParticleInfo(
            self.params['reconid'], self.params['iter'])
        stackdata = particles[0]['particle']['stack']
        stack = os.path.join(stackdata['path']['path'], stackdata['name'])
        classes, cstats = determineClasses(particles)

        rejectlst = []
        if self.params['sigma'] is not None:
            cutoff = cstats[
                'meanquality'] + self.params['sigma'] * cstats['stdquality']
            apDisplay.printMsg("Cutoff = " + str(cutoff))
            rejectlst = self.removePtclsByQualityFactor(
                particles, rejectlst, cutoff)
        if self.params['avgjump'] is not None:
            rejectlst = self.removePtclsByJumps(particles, rejectlst)
        if self.params['rejectlst']:
            rejectlst = removePtclsByLst(rejectlst, self.params)

        classkeys = classes.keys()
        classkeys.sort()
        classnum = 0
        totalptcls = 0

        keepfile = open('keep.lst', 'w')
        keepfile.write('#LST\n')
        reject = open('reject.lst', 'w')
        reject.write('#LST\n')
        apDisplay.printMsg("Processing classes")
        #loop through classes
        for key in classkeys:

            # file to hold particles of this class
            clsfile = open('clstmp.lst', 'w')
            clsfile.write('#LST\n')

            classnum += 1
            if classnum % 10 == 1:
                apDisplay.printMsg(
                    str(classnum) + " of " + (str(len(classkeys))))
            images = EMAN.EMData()

            #loop through particles in class
            nptcls = 0
            for ptcl in classes[key]['particles']:
                if ptcl['mirror']:
                    mirror = 1
                else:
                    mirror = 0
                rot = ptcl['euler3']
                rot = rot * math.pi / 180
                if ptcl['particle']['particleNumber'] not in rejectlst:
                    l = '%d\t%s\t%f,\t%f,%f,%f,%d\n' % (
                        ptcl['particle']['particleNumber'] - 1, stack,
                        ptcl['quality_factor'], rot, ptcl['shiftx'],
                        ptcl['shifty'], mirror)
                    keepfile.write(l)
                    clsfile.write(l)
                    totalptcls += 1
                    nptcls += 1
                else:
                    reject.write('%d\t%s\t%f,\t%f,%f,%f,%d\n' %
                                 (ptcl['particle']['particleNumber'] - 1,
                                  stack, ptcl['quality_factor'], rot,
                                  ptcl['shiftx'], ptcl['shifty'], mirror))
                #if ptcl['quality_factor']>cstats['meanquality']+3*cstats['stdquality']:
                #	high.write('%d\t%s\t%f,\t%f,%f,%f,%d\n' % (ptcl['particle']['particleNumber']-1,
                #		stack,ptcl['quality_factor'],rot,ptcl['shiftx'],ptcl['shifty'],mirror))

            clsfile.close()

            if nptcls < 1:
                continue
            if self.params['skipavg'] is False:
                makeClassAverages('clstmp.lst', self.params['outputstack'],
                                  classes[key], self.params)

            if self.params['eotest'] is True:
                self.makeEvenOddClasses('clstmp.lst', classes[key])

        apDisplay.printMsg("\n")
        reject.close()
        keepfile.close()
        os.remove('clstmp.lst')

        # make 3d density file if specified:
        if self.params['make3d'] is not None:
            self.params['make3d'] = os.path.basename(self.params['make3d'])
            outfile = os.path.join(self.params['rundir'],
                                   self.params['make3d'])
            apEMAN.make3d(self.params['stackname'],
                          outfile,
                          sym=self.params['sym'],
                          mode=self.params['mode'],
                          hard=self.params['hard'])
            apEMAN.executeEmanCmd("proc3d %s %s mask=%d norm" %
                                  (outfile, outfile, self.params['mask']))
            if self.params['eotest'] is True:
                apEMAN.make3d(self.params['oddstack'],
                              "odd.mrc",
                              sym=self.params['sym'],
                              mode=self.params['mode'],
                              hard=self.params['hard'])
                apEMAN.make3d(self.params['evenstack'],
                              "even.mrc",
                              sym=self.params['sym'],
                              mode=self.params['mode'],
                              hard=self.params['hard'])
                apEMAN.executeEmanCmd("proc3d odd.mrc even.mrc fsc=fsc.eotest")

        if os.path.exists(outfile):
            # run rmeasure
            apix = apStack.getStackPixelSizeFromStackId(self.params['stackid'])
            box = apVolume.getModelDimensions(outfile)
            apDisplay.printMsg('inserting density into database')
            symdata = apSymmetry.findSymmetry(self.params['sym'])
            if not symdata:
                apDisplay.printError('no symmetry associated with this model')
            modq = appiondata.Ap3dDensityData()
            modq['session'] = apStack.getSessionDataFromStackId(
                self.params['stackid'])
            modq['name'] = self.params['make3d']
            modq['path'] = appiondata.ApPathData(
                path=os.path.abspath(self.params['rundir']))
            modq['boxsize'] = box
            modq['mask'] = self.params['mask']
            modq['pixelsize'] = apix
            fscres = apRecon.getResolutionFromFSCFile('fsc.eotest',
                                                      box,
                                                      apix,
                                                      msg=True)
            modq['resolution'] = fscres
            modq['rmeasure'] = apRecon.runRMeasure(apix, outfile)
            modq['md5sum'] = apFile.md5sumfile(outfile)
            modq['maxjump'] = self.params['avgjump']
            modq['sigma'] = self.params['sigma']
            modq['hard'] = self.params['hard']
            modq['symmetry'] = symdata
            modq['refineIter'] = self.params['refineiter']
            if self.params['commit'] is True:
                modq.insert()

            apChimera.filterAndChimera(outfile,
                                       res=fscres,
                                       apix=apix,
                                       box=box,
                                       chimtype='snapshot',
                                       zoom=self.params['zoom'],
                                       sym=self.params['sym'],
                                       mass=self.params['mass'])
        else:
            apDisplay.printError(
                'no 3d volume was generated - check the class averages:')
            apDisplay.printError(self.params['stackname'])
            apDisplay.printError(
                'hard may be set too high, or avg euler jump set too low for the # of particles'
            )

        stackstr = str(stackdata.dbid)
        reconstr = str(self.params['reconid'])
        apDisplay.printColor(
            "Make a new stack with only non-jumpers:\n" +
            "subStack.py --projectid=" + str(self.params['projectid']) +
            " -s " + stackstr + " \\\n " + " -k " +
            os.path.join(self.params['rundir'], "keep.lst") + " \\\n " +
            " -d 'recon " + reconstr + " sitters' -n sitters" + reconstr +
            " -C ", "purple")
Exemple #12
0
        fsp = fsp.split('.')[0] + '.good.lst'
        f = open(fsp, 'w')
        for l in lines:
            d = l.strip().split()
            if len(d) < 3:
                f.write(l)
                continue
            if d[3][-1] == '1':
                f.write(l)
        f.close()
    n = EMAN.fileCount(fsp)[0]

    classnamepath = fsp.split('.')[0] + '.dir'
    if not os.path.exists(classnamepath):
        os.mkdir(classnamepath)
    b = EMAN.EMData()
    b.readImage(fsp, 0)
    e = b.getEuler()

    a = EMAN.EMData()
    if format == "eman" or format == "imagic":
        outname = "aligned.hed"
    else:
        outname = "aligned.spi"

    startn = 1
    if params['noproj'] is True:
        startn = 0
    print "creating aligned stack"
    for i in range(startn, n):
        a.readImage(fsp, i)
        rap = float(s[1])
    elif (s[0] == 'norm'):
        norm = int(s[1])
    elif (s[0] == 'searchx'):
        searchx = int(s[1])
    elif (s[0] == 'searchy'):
        searchy = int(s[1])
    elif (s[0] == 'searchz'):
        searchz = int(s[1])
    else:
        print("Unknown argument " + a)
        exit(1)

print target, probe

targetMRC = EMAN.EMData()
targetMRC.readImage(argv[1], -1)
targetMean = targetMRC.Mean()
targetSigma = targetMRC.Sigma()
print "Target Information"
print "   mean:       %f" % (targetMean)
print "   sigma:      %f" % (targetSigma)

target_xsize = targetMRC.xSize()
target_ysize = targetMRC.ySize()
target_zsize = targetMRC.zSize()
if (target_xsize != target_ysize != target_zsize) or (target_xsize % 2 == 1):
    print "The density map must be even and cubic. Terminating."
    sys.exit()
box = target_xsize