def getTemplate(self):
        """
                takes the spider file and creates an average template of all particles
                """
        ### create random keep list
        templatedata = apTemplate.getTemplateFromId(self.params["templateid"])
        templatepath = os.path.join(templatedata["path"]["path"], templatedata["templatename"])
        if not os.path.isfile(templatepath):
            apDisplay.printError("Could not find template: " + templatepath)
        newpath = os.path.join(self.params["rundir"], "template.mrc")
        shutil.copy(templatepath, newpath)

        ### needs to scale template by old apix to new apix

        templatefile = self.processTemplate("template.mrc")

        return templatefile
Exemple #2
0
    def getTemplate(self):
        """
		takes the spider file and creates an average template of all particles
		"""
        ### create random keep list
        templatedata = apTemplate.getTemplateFromId(self.params['templateid'])
        templatepath = os.path.join(templatedata['path']['path'],
                                    templatedata['templatename'])
        if not os.path.isfile(templatepath):
            apDisplay.printError("Could not find template: " + templatepath)
        newpath = os.path.join(self.params['rundir'], "template.mrc")
        shutil.copy(templatepath, newpath)

        ### needs to scale template by old apix to new apix

        templatefile = self.processTemplate("template.mrc")

        return templatefile
	def insertRefBasedRun(self, partlist, imagicstack, insert=False):
		apDisplay.printMsg("committing results to DB")

		### setup alignment run
		alignrunq = appiondata.ApAlignRunData()
		alignrunq['runname'] = self.params['runname']
		alignrunq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
		uniquerun = alignrunq.query(results=1)
		if uniquerun:
			apDisplay.printError("Run name '"+runparams['runname']+"' and path already exist in database")

		### setup ref based run
		refrunq = appiondata.ApRefBasedRunData()
		refrunq['runname'] = self.params['runname']
		refrunq['xysearch'] = self.params['xysearch']
		refrunq['xystep'] = self.params['xystep']
		refrunq['first_ring'] = self.params['firstring']
		refrunq['last_ring'] = self.params['lastring']
		refrunq['num_iter'] = self.params['numiter']
		refrunq['invert_templs'] = self.params['inverttemplates']
		refrunq['num_templs'] = self.params['numtemplate']
		#refrunq['csym', int),
		refrunq['run_seconds'] = self.params['runtime']

		### finish alignment run
		alignrunq = appiondata.ApAlignRunData()
		alignrunq['refbasedrun'] = refrunq
		alignrunq['hidden'] = False
		alignrunq['bin'] = self.params['bin']
		alignrunq['hp_filt'] = self.params['highpass']
		alignrunq['lp_filt'] = self.params['lowpass']
		alignrunq['runname'] = self.params['runname']
		alignrunq['description'] = self.params['description']

		### setup alignment stack
		alignstackq = appiondata.ApAlignStackData()
		alignstackq['alignrun'] = alignrunq

		alignstackq['imagicfile'] = imagicstack
		alignstackq['avgmrcfile'] = "average.mrc"
		emancmd = "proc2d templatestack%02d.spi templatestack%02d.hed"%(self.params['numiter'],self.params['numiter'])
		apEMAN.executeEmanCmd(emancmd)
		alignstackq['refstackfile'] = ("templatestack%02d.hed"%(self.params['numiter']))
		alignstackq['alignrun'] = alignrunq
		alignstackq['iteration'] = self.params['numiter']
		alignstackq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
		### check to make sure files exist
		imagicfile = os.path.join(self.params['rundir'], alignstackq['imagicfile'])
		if not os.path.isfile(imagicfile):
			apDisplay.printError("could not find stack file: "+imagicfile)
		avgmrcfile = os.path.join(self.params['rundir'], alignstackq['avgmrcfile'])
		if not os.path.isfile(avgmrcfile):
			apDisplay.printError("could not find average mrc file: "+avgmrcfile)
		refstackfile = os.path.join(self.params['rundir'], alignstackq['refstackfile'])
		if not os.path.isfile(refstackfile):
			apDisplay.printError("could not find reference stack file: "+refstackfile)
		alignstackq['stack'] = self.stack['data']
		alignstackq['boxsize'] = self.boxsize
		alignstackq['pixelsize'] = self.stack['apix']*self.params['bin']
		alignstackq['description'] = self.params['description']
		alignstackq['hidden'] = False
		alignstackq['num_particles'] = self.params['numpart']

		if insert is True:
			alignstackq.insert()

		### insert reference data
		reflist = []

		for j in range(self.params['numiter']):
			iternum = j+1
			for i in range(len(self.templatelist)):
				refnum = i+1
				templateid = self.templatelist[i]
				refq = appiondata.ApAlignReferenceData()
				refq['refnum'] = refnum
				refq['iteration'] = iternum
				refq['template'] = apTemplate.getTemplateFromId(templateid)
				refq['mrcfile'] = ("templateavg%02d-%02d.mrc"%(iternum,refnum))
				refpath = os.path.join(self.params['rundir'], "templates")
				refq['path'] = appiondata.ApPathData(path=os.path.abspath(refpath))
				refq['alignrun'] = alignrunq
				if refnum  in self.resdict:
					refq['ssnr_resolution'] = self.resdict[refnum]
				if insert is True:
					refq.insert()
				if iternum == self.params['numiter']:
					reflist.append(refq)
		#refq['varmrcfile', str),
		#refq['frc_resolution', float),

		### insert particle data
		apDisplay.printColor("Inserting particle alignment data, please wait", "cyan")
		for partdict in partlist:
			### see apSpider.alignment.alignStack() for more info
			"""
			partdict.keys()
			'num': int(data[0]), #SPIDER NUMBERING: 1,2,3,...
			'template': int(abs(templatenum)), #SPIDER NUMBERING: 1,2,3,...
			'mirror': checkMirror(templatenum),
			'score': float(data[3]),
			'rot': float(data[4]),
			'xshift': float(data[5]),
			'yshift': float(data[6]),
			"""

			alignpartq = appiondata.ApAlignParticleData()
			alignpartq['ref'] = reflist[partdict['template']-1]
			alignpartq['partnum'] = partdict['num']
			alignpartq['alignstack'] = alignstackq
			stackpartdata = apStack.getStackParticle(self.params['stackid'], partdict['num'])
			alignpartq['stackpart'] = stackpartdata
			alignpartq['xshift'] = partdict['xshift']
			alignpartq['yshift'] = partdict['yshift']
			alignpartq['rotation'] = partdict['rot']
			alignpartq['score'] = partdict['score']
			alignpartq['mirror'] = partdict['mirror']

			if insert is True:
				alignpartq.insert()
		return
	def insertRefBasedRun(self, partlist, imagicstack, insert=False):
		apDisplay.printMsg("committing results to DB")

		### setup alignment run
		alignrunq = appiondata.ApAlignRunData()
		alignrunq['runname'] = self.params['runname']
		alignrunq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
		uniquerun = alignrunq.query(results=1)
		if uniquerun:
			apDisplay.printError("Run name '"+runparams['runname']+"' and path already exist in database")

		### setup ref based run
		refrunq = appiondata.ApRefBasedRunData()
		refrunq['runname'] = self.params['runname']
		refrunq['xysearch'] = self.params['xysearch']
		refrunq['xystep'] = self.params['xystep']
		refrunq['first_ring'] = self.params['firstring']
		refrunq['last_ring'] = self.params['lastring']
		refrunq['num_iter'] = self.params['numiter']
		refrunq['invert_templs'] = self.params['inverttemplates']
		refrunq['num_templs'] = self.params['numtemplate']
		#refrunq['csym', int),
		refrunq['run_seconds'] = self.params['runtime']

		### finish alignment run
		alignrunq = appiondata.ApAlignRunData()
		alignrunq['refbasedrun'] = refrunq
		alignrunq['hidden'] = False
		alignrunq['bin'] = self.params['bin']
		alignrunq['hp_filt'] = self.params['highpass']
		alignrunq['lp_filt'] = self.params['lowpass']
		alignrunq['runname'] = self.params['runname']
		alignrunq['description'] = self.params['description']

		### setup alignment stack
		alignstackq = appiondata.ApAlignStackData()
		alignstackq['alignrun'] = alignrunq

		alignstackq['imagicfile'] = imagicstack
		alignstackq['avgmrcfile'] = "average.mrc"
		emancmd = "proc2d templatestack%02d.spi templatestack%02d.hed"%(self.params['numiter'],self.params['numiter'])
		apEMAN.executeEmanCmd(emancmd)
		alignstackq['refstackfile'] = ("templatestack%02d.hed"%(self.params['numiter']))
		alignstackq['alignrun'] = alignrunq
		alignstackq['iteration'] = self.params['numiter']
		alignstackq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
		### check to make sure files exist
		imagicfile = os.path.join(self.params['rundir'], alignstackq['imagicfile'])
		if not os.path.isfile(imagicfile):
			apDisplay.printError("could not find stack file: "+imagicfile)
		avgmrcfile = os.path.join(self.params['rundir'], alignstackq['avgmrcfile'])
		if not os.path.isfile(avgmrcfile):
			apDisplay.printError("could not find average mrc file: "+avgmrcfile)
		refstackfile = os.path.join(self.params['rundir'], alignstackq['refstackfile'])
		if not os.path.isfile(refstackfile):
			apDisplay.printError("could not find reference stack file: "+refstackfile)
		alignstackq['stack'] = self.stack['data']
		alignstackq['boxsize'] = self.boxsize
		alignstackq['pixelsize'] = self.stack['apix']*self.params['bin']
		alignstackq['description'] = self.params['description']
		alignstackq['hidden'] = False
		alignstackq['num_particles'] = self.params['numpart']

		if insert is True:
			alignstackq.insert()

		### insert reference data
		reflist = []

		for j in range(self.params['numiter']):
			iternum = j+1
			for i in range(len(self.templatelist)):
				refnum = i+1
				templateid = self.templatelist[i]
				refq = appiondata.ApAlignReferenceData()
				refq['refnum'] = refnum
				refq['iteration'] = iternum
				refq['template'] = apTemplate.getTemplateFromId(templateid)
				refq['mrcfile'] = ("templateavg%02d-%02d.mrc"%(iternum,refnum))
				refpath = os.path.join(self.params['rundir'], "templates")
				refq['path'] = appiondata.ApPathData(path=os.path.abspath(refpath))
				refq['alignrun'] = alignrunq
				if refnum  in self.resdict:
					refq['ssnr_resolution'] = self.resdict[refnum]
				if insert is True:
					refq.insert()
				if iternum == self.params['numiter']:
					reflist.append(refq)
		#refq['varmrcfile', str),
		#refq['frc_resolution', float),

		### insert particle data
		apDisplay.printColor("Inserting particle alignment data, please wait", "cyan")
		for partdict in partlist:
			### see apSpider.alignment.alignStack() for more info
			"""
			partdict.keys()
			'num': int(data[0]), #SPIDER NUMBERING: 1,2,3,...
			'template': int(abs(templatenum)), #SPIDER NUMBERING: 1,2,3,...
			'mirror': checkMirror(templatenum),
			'score': float(data[3]),
			'rot': float(data[4]),
			'xshift': float(data[5]),
			'yshift': float(data[6]),
			"""

			alignpartq = appiondata.ApAlignParticleData()
			alignpartq['ref'] = reflist[partdict['template']-1]
			alignpartq['partnum'] = partdict['num']
			alignpartq['alignstack'] = alignstackq
			stackpartdata = apStack.getStackParticle(self.params['stackid'], partdict['num'])
			alignpartq['stackpart'] = stackpartdata
			alignpartq['xshift'] = partdict['xshift']
			alignpartq['yshift'] = partdict['yshift']
			alignpartq['rotation'] = partdict['rot']
			alignpartq['score'] = partdict['score']
			alignpartq['mirror'] = partdict['mirror']

			if insert is True:
				alignpartq.insert()
		return
Exemple #5
0
    def insertEdIterRun(self, insert=False):
        ### setup alignment run
        alignrunq = appiondata.ApAlignRunData()
        alignrunq['runname'] = self.params['runname']
        alignrunq['path'] = appiondata.ApPathData(
            path=os.path.abspath(self.params['rundir']))
        uniquerun = alignrunq.query(results=1)
        if uniquerun:
            apDisplay.printError("Run name '" + runparams['runname'] +
                                 "' and path already exist in database")

        ### setup ed-iter run
        editrunq = appiondata.ApEdIterRunData()
        editrunq['runname'] = self.params['runname']
        editrunq['radius'] = self.params['partrad']
        editrunq['num_iter'] = self.params['numiter']
        #editrunq['freealigns'] = self.params['freealigns']  ### no longer an option
        editrunq['invert_templs'] = self.params['inverttemplates']
        editrunq['num_templs'] = self.params['numtemplate']
        #editrunq['csym', int),
        editrunq['run_seconds'] = self.runtime

        ### finish alignment run
        alignrunq = appiondata.ApAlignRunData()
        alignrunq['editerrun'] = editrunq
        alignrunq['hidden'] = False
        alignrunq['bin'] = self.params['bin']
        alignrunq['hp_filt'] = self.params['highpass']
        alignrunq['lp_filt'] = self.params['lowpass']
        alignrunq['runname'] = self.params['runname']
        alignrunq['description'] = self.params['description']

        ### setup aligned stack
        alignstackq = appiondata.ApAlignStackData()
        alignstackq['alignrun'] = alignrunq
        alignstackq['path'] = appiondata.ApPathData(
            path=os.path.abspath(self.params['rundir']))
        # stack of aligned particles
        alignstackq['imagicfile'] = "alignstack.hed"
        # final class averages
        alignstackq['refstackfile'] = "avg.hed"
        # averaged results
        alignstackq['avgmrcfile'] = "average.mrc"
        # check to be sure dbpaths to files are correct
        refstackfile = os.path.join(
            self.params['rundir'],
            alignstackq['refstackfile'])  #final averages
        if not os.path.isfile(refstackfile):
            apDisplay.printError("could not find reference stack file: " +
                                 refstackfile)
        avgmrcfile = os.path.join(self.params['rundir'],
                                  alignstackq['avgmrcfile'])  #averaged results
        if not os.path.isfile(avgmrcfile):
            apDisplay.printError("could not find average mrc file: " +
                                 avgmrcfile)
        alignstackq['stack'] = self.stack['data']
        alignstackq['iteration'] = self.params['numiter']
        alignstackq['boxsize'] = math.floor(self.stack['boxsize'] /
                                            self.params['bin'])
        alignstackq['pixelsize'] = self.stack['apix'] * self.params['bin']
        alignstackq['description'] = self.params['description']
        alignstackq['hidden'] = False
        alignstackq['num_particles'] = self.params['numpart']

        if insert is True:
            alignstackq.insert(
            )  #alignstackq contains alignrunq which contains editrunq

        ### setup data from each iteration
        apDisplay.printColor(
            "Inserting average and variance images from each iteration, please wait",
            "cyan")
        reflist = []
        for j in range(self.params['numiter']):
            iternum = j + 1
            for i in range(len(self.templatelist)):
                refnum = i + 1
                templateid = self.templatelist[i]
                refq = appiondata.ApAlignReferenceData()
                refq['refnum'] = refnum
                refq['iteration'] = iternum
                refq['template'] = apTemplate.getTemplateFromId(templateid)
                refpath = os.path.join(self.params['rundir'], "templates")
                refq['path'] = appiondata.ApPathData(
                    path=os.path.abspath(refpath))
                refq['alignrun'] = alignrunq
                #refq['frc_resolution'] = #(float)
                avgname = os.path.join(self.params['rundir'],
                                       "r%02d/avg%03d" % (iternum, refnum))
                varname = os.path.join(self.params['rundir'],
                                       "r%02d/var%03d" % (iternum, refnum))
                if os.path.isfile(avgname + ".spi"):
                    emancmd = "proc2d " + avgname + ".spi " + avgname + ".mrc"
                    apEMAN.executeEmanCmd(emancmd)
                    refq['mrcfile'] = (avgname + ".mrc")
                    emancmd = "proc2d " + varname + ".spi " + varname + ".mrc"
                    apEMAN.executeEmanCmd(emancmd)
                    refq['varmrcfile'] = (varname + ".mrc")
                    if insert is True:
                        refq.insert()
                    if iternum == self.params['numiter']:
                        reflist.append(refq)
                else:
                    reflist.append(None)

        ### insert particle data
        apDisplay.printColor("Inserting particle alignment data, please wait",
                             "cyan")
        partlist = self.readApshDocFile("apshdoc.spi", "apshdoc.pickle")
        for partdict in partlist:
            alignpartq = appiondata.ApAlignParticleData()
            alignpartq['ref'] = reflist[partdict['template'] - 1]
            alignpartq['partnum'] = partdict['num']
            alignpartq['alignstack'] = alignstackq
            stackpartdata = apStack.getStackParticle(self.params['stackid'],
                                                     partdict['num'])
            alignpartq['stackpart'] = stackpartdata
            alignpartq['rotation'] = partdict['rot']
            alignpartq['xshift'] = partdict['xshift']
            alignpartq['yshift'] = partdict['yshift']
            alignpartq['mirror'] = partdict['mirror']
            alignpartq['score'] = partdict['score']

            if insert is True:
                alignpartq.insert()  #insert each particle
        return
        def insertEdIterRun(self, insert=False):
                ### setup alignment run
                alignrunq = appiondata.ApAlignRunData()
                alignrunq['runname'] = self.params['runname']
                alignrunq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
                uniquerun = alignrunq.query(results=1)
                if uniquerun:
                        apDisplay.printError("Run name '"+runparams['runname']+"' and path already exist in database")

                ### setup ed-iter run
                editrunq = appiondata.ApEdIterRunData()
                editrunq['runname'] = self.params['runname']
                editrunq['radius'] = self.params['partrad']
                editrunq['num_iter'] = self.params['numiter']
                #editrunq['freealigns'] = self.params['freealigns']  ### no longer an option
                editrunq['invert_templs'] = self.params['inverttemplates']
                editrunq['num_templs'] = self.params['numtemplate']
                #editrunq['csym', int),
                editrunq['run_seconds'] = self.runtime

                ### finish alignment run
                alignrunq = appiondata.ApAlignRunData()
                alignrunq['editerrun'] = editrunq
                alignrunq['hidden'] = False
                alignrunq['bin'] = self.params['bin']
                alignrunq['hp_filt'] = self.params['highpass']
                alignrunq['lp_filt'] = self.params['lowpass']
                alignrunq['runname'] = self.params['runname']
                alignrunq['description'] = self.params['description']

                ### setup aligned stack
                alignstackq = appiondata.ApAlignStackData()
                alignstackq['alignrun'] = alignrunq
                alignstackq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
                # stack of aligned particles
                alignstackq['imagicfile'] = "alignstack.hed"
                # final class averages
                alignstackq['refstackfile'] = "avg.hed"
                # averaged results
                alignstackq['avgmrcfile'] = "average.mrc"
                # check to be sure dbpaths to files are correct
                refstackfile = os.path.join(self.params['rundir'], alignstackq['refstackfile']) #final averages
                if not os.path.isfile(refstackfile):
                        apDisplay.printError("could not find reference stack file: "+refstackfile)
                avgmrcfile = os.path.join(self.params['rundir'], alignstackq['avgmrcfile']) #averaged results
                if not os.path.isfile(avgmrcfile):
                        apDisplay.printError("could not find average mrc file: "+avgmrcfile)
                alignstackq['stack'] = self.stack['data']
                alignstackq['iteration'] = self.params['numiter']
                alignstackq['boxsize'] = math.floor(self.stack['boxsize']/self.params['bin'])
                alignstackq['pixelsize'] = self.stack['apix']*self.params['bin']
                alignstackq['description'] = self.params['description']
                alignstackq['hidden'] = False
                alignstackq['num_particles'] = self.params['numpart']

                if insert is True:
                        alignstackq.insert() #alignstackq contains alignrunq which contains editrunq

                ### setup data from each iteration
                apDisplay.printColor("Inserting average and variance images from each iteration, please wait", "cyan")
                reflist = []
                for j in range(self.params['numiter']):
                        iternum = j+1
                        for i in range(len(self.templatelist)):
                                refnum = i+1
                                templateid = self.templatelist[i]
                                refq = appiondata.ApAlignReferenceData()
                                refq['refnum'] = refnum
                                refq['iteration'] = iternum
                                refq['template'] = apTemplate.getTemplateFromId(templateid)
                                refpath = os.path.join(self.params['rundir'], "templates")
                                refq['path'] = appiondata.ApPathData(path=os.path.abspath(refpath))
                                refq['alignrun'] = alignrunq
                                #refq['frc_resolution'] = #(float)
                                avgname = os.path.join(self.params['rundir'], "r%02d/avg%03d"%(iternum,refnum) )
                                varname = os.path.join(self.params['rundir'], "r%02d/var%03d"%(iternum,refnum) )
                                if os.path.isfile(avgname+".spi"):
                                        emancmd = "proc2d "+avgname+".spi "+avgname+".mrc"
                                        apEMAN.executeEmanCmd(emancmd)
                                        refq['mrcfile'] = (avgname+".mrc")
                                        emancmd = "proc2d "+varname+".spi "+varname+".mrc"
                                        apEMAN.executeEmanCmd(emancmd)
                                        refq['varmrcfile'] = (varname+".mrc")
                                        if insert is True:
                                                refq.insert()
                                        if iternum == self.params['numiter']:
                                                reflist.append(refq)
                                else:
                                        reflist.append(None)

                ### insert particle data
                apDisplay.printColor("Inserting particle alignment data, please wait", "cyan")
                partlist = self.readApshDocFile("apshdoc.spi","apshdoc.pickle")
                for partdict in partlist:
                        alignpartq = appiondata.ApAlignParticleData()
                        alignpartq['ref'] = reflist[partdict['template']-1]
                        alignpartq['partnum'] = partdict['num']
                        alignpartq['alignstack'] = alignstackq
                        stackpartdata = apStack.getStackParticle(self.params['stackid'], partdict['num'])
                        alignpartq['stackpart'] = stackpartdata
                        alignpartq['rotation'] = partdict['rot']
                        alignpartq['xshift'] = partdict['xshift']
                        alignpartq['yshift'] = partdict['yshift']
                        alignpartq['mirror'] = partdict['mirror']
                        alignpartq['score'] = partdict['score']

                        if insert is True:
                                alignpartq.insert() #insert each particle
                return