def insertAlignStackRunIntoDatabase(self, alignimagicfile, refstackfile):
        apDisplay.printMsg("Inserting SIMPLE Run into DB")

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

        ### finish alignment run
        alignrunq['simplerun'] = self.simpleqdata
        alignrunq['hidden'] = False
        alignrunq['runname'] = self.runparams['runname']
        alignrunq['description'] = self.runparams['description']
        #               alignrunq['lp_filt'] = self.runparams['lowpass']
        #               alignrunq['hp_filt'] = self.runparams['highpass']
        alignrunq['bin'] = self.runparams['bin']

        ### setup alignment stack
        alignstackq = appiondata.ApAlignStackData()
        alignstackq['imagicfile'] = alignimagicfile
        alignstackq['avgmrcfile'] = "average.mrc"
        alignstackq['refstackfile'] = refstackfile
        alignstackq['iteration'] = 10  ### hardcoded in SIMPLE
        alignstackq['path'] = appiondata.ApPathData(
            path=os.path.abspath(self.params['rundir']))
        alignstackq['alignrun'] = alignrunq
        ### check to make sure files exist
        alignimagicfilepath = os.path.join(self.params['rundir'],
                                           alignstackq['imagicfile'])
        if not os.path.isfile(alignimagicfilepath):
            apDisplay.printError("could not find stack file: " +
                                 alignimagicfilepath)
        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'] = apStack.getOnlyStackData(
            self.runparams['stackid'])
        alignstackq['boxsize'] = self.boxsize
        alignstackq['pixelsize'] = self.apix
        alignstackq['description'] = self.runparams['description']
        alignstackq['hidden'] = False
        alignstackq['num_particles'] = self.runparams['numpart']

        ### insert
        if self.params['commit'] is True:
            alignstackq.insert()
        self.alignstackdata = alignstackq

        return
コード例 #2
0
 def insertMaxLikeJob(self):
     maxjobq = appiondata.ApMaxLikeJobData()
     maxjobq['runname'] = self.params['runname']
     maxjobq['path'] = appiondata.ApPathData(
         path=os.path.abspath(self.params['rundir']))
     maxjobdatas = maxjobq.query(results=1)
     if maxjobdatas:
         alignrunq = appiondata.ApAlignRunData()
         alignrunq['runname'] = self.params['runname']
         alignrunq['path'] = appiondata.ApPathData(
             path=os.path.abspath(self.params['rundir']))
         alignrundata = alignrunq.query(results=1)
         if maxjobdatas[0]['finished'] is True or alignrundata:
             apDisplay.printError(
                 "This run name already exists as finished in the database, please change the runname"
             )
     maxjobq[
         'REF|projectdata|projects|project'] = apProject.getProjectIdFromStackId(
             self.params['stackid'])
     maxjobq['timestamp'] = self.timestamp
     maxjobq['finished'] = False
     maxjobq['hidden'] = False
     if self.params['commit'] is True:
         maxjobq.insert()
     self.params['maxlikejobid'] = maxjobq.dbid
     print "self.params['maxlikejobid']", self.params['maxlikejobid']
     return
コード例 #3
0
	def insertAlignStackRunIntoDatabase(self, alignimagicfile):
		apDisplay.printMsg("Inserting CL2D Run into DB")

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

		### setup cl2d run
		cl2dq = appiondata.ApCL2DRunData()
		cl2dq['runname'] = self.runparams['runname']
		cl2dq['run_seconds'] = self.runparams['runtime']
		cl2dq['fast'] = self.runparams['fast']
		self.cl2dqdata=cl2dq

		### finish alignment run
		alignrunq['cl2drun'] = cl2dq
		alignrunq['hidden'] = False
		alignrunq['runname'] = self.runparams['runname']
		alignrunq['description'] = self.runparams['description']
		alignrunq['lp_filt'] = self.runparams['lowpass']
		alignrunq['hp_filt'] = self.runparams['highpass']
		alignrunq['bin'] = self.runparams['bin']

		### setup alignment stack
		alignstackq = appiondata.ApAlignStackData()
		if self.runparams['align'] is True:		### option to create aligned stack
			alignstackq['imagicfile'] = alignimagicfile
			alignstackq['avgmrcfile'] = "average.mrc"
			alignstackq['refstackfile'] = "part"+self.params['timestamp']+"_level_%02d_.hed"%(self.Nlevels-1)
		alignstackq['iteration'] = self.runparams['maxiter']
		alignstackq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
		alignstackq['alignrun'] = alignrunq
		### check to make sure files exist
		if self.runparams['align'] is True:		### option to create aligned stack
			alignimagicfilepath = os.path.join(self.params['rundir'], alignstackq['imagicfile'])
			if not os.path.isfile(alignimagicfilepath):
				apDisplay.printError("could not find stack file: "+alignimagicfilepath)
			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'] = apStack.getOnlyStackData(self.runparams['stackid'])
		alignstackq['boxsize'] = self.boxsize
		alignstackq['pixelsize'] = apStack.getStackPixelSizeFromStackId(self.runparams['stackid'])*self.runparams['bin']
		alignstackq['description'] = self.runparams['description']
		alignstackq['hidden'] =  False
		alignstackq['num_particles'] =  self.runparams['numpart']

		### insert
		if self.params['commit'] is True:
			alignstackq.insert()
		self.alignstackdata = alignstackq

		return
コード例 #4
0
	def insertRunIntoDatabase(self):
		apDisplay.printMsg("Inserting Topology Rep Run into DB")

		### set up 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 '"+self.params['runname']+"' and path already exist in database")

		### set up topology rep run
		toprepq = appiondata.ApTopolRepRunData()
		toprepq['runname'] = self.params['runname']
		toprepq['mask'] = self.params['mask']
		toprepq['itermult'] = self.params['itermult']
		toprepq['learn'] = self.params['learn']
		toprepq['ilearn'] = self.params['ilearn']
		toprepq['age'] = self.params['maxage']
		toprepq['mramethod'] = self.params['mramethod']
		toprepq['job'] = self.params['topoljob']

		### finish alignment run
		alignrunq['topreprun'] = toprepq
		alignrunq['hidden'] = False
		alignrunq['runname'] = self.params['runname']
		alignrunq['description'] = self.params['description']
		alignrunq['lp_filt'] = self.params['lowpass']
		alignrunq['hp_filt'] = self.params['highpass']
		alignrunq['bin'] = self.params['bin']
		### set up alignment stack
		alignstackq = appiondata.ApAlignStackData()
		alignstackq['imagicfile'] = "mrastack.hed"
		alignstackq['avgmrcfile'] = "average.mrc"
		alignstackq['refstackfile'] = os.path.basename(self.params['currentcls'])+".hed"
		alignstackq['iteration'] = self.params['currentiter']
		alignstackq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
		alignstackq['alignrun'] = alignrunq

		### 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.stackdata
		alignstackq['boxsize'] = math.floor(self.workingboxsize)
		alignstackq['pixelsize'] = self.stack['apix']*self.params['bin']
		alignstackq['description'] = self.params['description']
		alignstackq['hidden'] =  False
		alignstackq['num_particles'] =  self.params['numpart']

		if self.params['commit'] is True:
			alignstackq.insert()
		self.alignstackdata = alignstackq
コード例 #5
0
 def checkRunNamePath(self):
     ### 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")
コード例 #6
0
def getAlignRunIdFromName(alignrunname):
	alignrunq = appiondata.ApAlignRunData()
	alignrunq['runname'] = alignrunname
	alignrundatas = alignrunq.query()

	if not alignrundatas:
		return None
	if len(alignrundatas) == 1:
		### simpe case
		alignrunid = alignrundatas[0].dbid
	else:
		for alignrundata in alignrundatas:
			print alignrundata
		apDisplay.printError("Found too many align runs for specified criteria")

	apDisplay.printMsg("Found align run id %d"%(alignrunid))
	return alignrunid
コード例 #7
0
	def insertTopolRepJob(self):
		topoljobq = appiondata.ApTopolRepJobData()
		topoljobq['runname'] = self.params['runname']
		topoljobq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
		topoljobdatas = topoljobq.query(results=1)
		if topoljobdatas:
			alignrunq = appiondata.ApAlignRunData()
			alignrunq['runname'] = self.params['runname']
			alignrunq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
			alignrundata = alignrunq.query(results=1)
			if topoljobdatas[0]['finished'] is True or alignrundata:
				apDisplay.printError("This run name already exists as finished in the database, please change the runname")
		topoljobq['REF|projectdata|projects|project'] = apProject.getProjectIdFromStackId(self.params['stackid'])
		topoljobq['timestamp'] = self.timestamp
		topoljobq['finished'] = False
		topoljobq['hidden'] = False
		if self.params['commit'] is True:
			topoljobq.insert()
		self.params['topoljob'] = topoljobq
		return
コード例 #8
0
	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
コード例 #9
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
コード例 #10
0
    def commitToDatabase(self):
        """
		insert the results into the database
		"""
        ### expected result for an alignment run:
        ### 1. aligned particle stack in IMAGIC
        ### 2. rotation, shift, and quality parameters for each particle
        ### 3. which particles belongs to which class
        ### 4. stack file with the class averages

        alignedstack = os.path.join(self.params['rundir'], "ptcl.hed")
        refstack = os.path.join(self.params['rundir'], "iter.final.hed")
        averagemrc = os.path.join(self.params['rundir'], "average.mrc")
        apStack.averageStack(alignedstack, averagemrc)
        particlemapping = self.determineClassOwnership()

        ### 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 exisclassmappingt in database")

        ### setup eman refine2d run
        emanrefinetwodq = appiondata.ApEMANRefine2dRunData()
        emanrefinetwodq['runname'] = self.params['runname']
        emanrefinetwodq['run_seconds'] = time.time() - self.t0
        emanrefinetwodq['num_iters'] = self.params['numiter']
        emanrefinetwodq['num_classes'] = self.params['numclasses']

        ### finish alignment run
        alignrunq['refine2drun'] = emanrefinetwodq
        alignrunq['hidden'] = False
        alignrunq['runname'] = self.params['runname']
        alignrunq['description'] = self.params['description']
        alignrunq['lp_filt'] = self.params['lowpass']
        alignrunq['hp_filt'] = self.params['highpass']
        alignrunq['bin'] = self.params['bin']

        ### setup alignment stackalignimagicfile
        alignstackq = appiondata.ApAlignStackData()
        alignstackq['imagicfile'] = os.path.basename(alignedstack)
        alignstackq['avgmrcfile'] = os.path.basename(averagemrc)
        alignstackq['refstackfile'] = os.path.basename(refstack)
        alignstackq['iteration'] = self.params['numiter']
        alignstackq['path'] = appiondata.ApPathData(
            path=os.path.abspath(self.params['rundir']))
        alignstackq['alignrun'] = alignrunq

        ### check to make sure files exist
        alignimagicfilepath = os.path.join(self.params['rundir'],
                                           alignstackq['imagicfile'])
        if not os.path.isfile(alignimagicfilepath):
            apDisplay.printError("could not find stack file: " +
                                 alignimagicfilepath)
        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.printErrrefqor("could not find reference stack file: " +
                                     refstackfile)

        ### continue setting values
        alignstackq['stack'] = apStack.getOnlyStackData(self.params['stackid'])
        alignstackq['boxsize'] = apFile.getBoxSize(alignimagicfilepath)[0]
        alignstackq['pixelsize'] = apStack.getStackPixelSizeFromStackId(
            self.params['stackid']) * self.params['bin']
        alignstackq['description'] = self.params['description']
        alignstackq['hidden'] = False
        alignstackq['num_particles'] = apFile.numImagesInStack(
            alignimagicfilepath)

        ### inserting particles and references
        apDisplay.printColor("Inserting particle alignment data, please wait",
                             "cyan")
        for emanpartnum in range(self.params['numpart']):
            partnum = emanpartnum + 1
            if partnum % 100 == 0:
                sys.stderr.write(".")

            ### setup reference
            refq = appiondata.ApAlignReferenceData()
            refnum = particlemapping[emanpartnum]
            refq['refnum'] = refnum
            refq['iteration'] = self.params['numiter']
            refq['path'] = appiondata.ApPathData(
                path=os.path.abspath(self.params['rundir']))
            refq['alignrun'] = alignrunq

            ### TODO: create mrc file
            #refq['mrcfile'] = refbase+".mrc"
            #reffile = os.path.join(self.params['rundir'], refq['mrcfile'])
            #if not os.path.isfile(reffile):
            #	emancmd = "proc2d "+refstack+".xmp "+refstack+".mrc"
            #	apEMAN.executeEmanCmd(emancmd, verbose=False)
            #if not os.path.isfile(reffile):
            #	apDisplay.printError("could not find reference file: "+reffile)

            ### TODO: get resolution
            #refq['ssnr_resolution'] = TODO

            ### setup particle
            alignpartq = appiondata.ApAlignParticleData()
            alignpartq['partnum'] = partnum
            alignpartq['alignstack'] = alignstackq
            stackpartdata = apStack.getStackParticle(self.params['stackid'],
                                                     partnum)
            alignpartq['stackpart'] = stackpartdata
            ### TODO: get the alignment parameters
            #alignpartq['xshift'] = partdict['xshift']
            #alignpartq['yshift'] = partdict['yshift']
            #alignpartq['rotation'] = partdict['inplane']
            #alignpartq['mirror'] = partdict['mirror']
            alignpartq['ref'] = refq
            ### TODO: get the score
            #alignpartq['score'] = partdict['score']

            ### insert
            if self.params['commit'] is True:
                alignpartq.insert()

        return
コード例 #11
0
	def insertRunIntoDatabase(self, alignimagicfile, runparams):
		apDisplay.printMsg("Inserting MaxLike Run into DB")

		### setup alignment run
		alignrunq = appiondata.ApAlignRunData()
		alignrunq['runname'] = runparams['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 max like run
		maxlikeq = appiondata.ApMaxLikeRunData()
		maxlikeq['runname'] = runparams['runname']
		maxlikeq['run_seconds'] = runparams['runtime']
		#maxlikeq['mask_diam'] = 2.0*runparams['maskrad']
		maxlikeq['fast'] = runparams['fast']
		maxlikeq['fastmode'] = runparams['fastmode']
		maxlikeq['mirror'] = runparams['mirror']
		maxlikeq['student'] = bool(runparams['student'])
		maxlikeq['init_method'] = "xmipp default"
		maxlikeq['job'] = self.getMaxLikeJob(runparams)

		### finish alignment run
		alignrunq['maxlikerun'] = maxlikeq
		alignrunq['hidden'] = False
		alignrunq['runname'] = runparams['runname']
		alignrunq['description'] = runparams['description']
		alignrunq['lp_filt'] = runparams['lowpass']
		alignrunq['hp_filt'] = runparams['highpass']
		alignrunq['bin'] = runparams['bin']

		### setup alignment stack
		alignstackq = appiondata.ApAlignStackData()
		alignstackq['imagicfile'] = alignimagicfile
		alignstackq['avgmrcfile'] = "average.mrc"
		alignstackq['refstackfile'] = "part"+self.params['timestamp']+"_average.hed"
		alignstackq['iteration'] = self.lastiter
		alignstackq['path'] = appiondata.ApPathData(path=os.path.abspath(self.params['rundir']))
		alignstackq['alignrun'] = alignrunq
		### check to make sure files exist
		alignimagicfilepath = os.path.join(self.params['rundir'], alignstackq['imagicfile'])
		if not os.path.isfile(alignimagicfilepath):
			apDisplay.printError("could not find stack file: "+alignimagicfilepath)
		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'] = apStack.getOnlyStackData(runparams['stackid'])
		alignstackq['boxsize'] = apFile.getBoxSize(alignimagicfilepath)[0]
		alignstackq['pixelsize'] = apStack.getStackPixelSizeFromStackId(runparams['stackid'])*runparams['bin']
		alignstackq['description'] = runparams['description']
		alignstackq['hidden'] =  False
		alignstackq['num_particles'] =  runparams['numpart']

		### insert
		if self.params['commit'] is True:
			alignstackq.insert()
		self.alignstackdata = alignstackq

		return
コード例 #12
0
    def insertRunIntoDatabase(self, alignedPartStack, alignedClassStack,
                              runparams):
        apDisplay.printMsg("Inserting ISAC Run into DB")

        ### setup alignment run
        alignrunq = appiondata.ApAlignRunData()
        alignrunq['runname'] = runparams['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 ISAC like run
        isacq = appiondata.ApSparxISACRunData()
        isacq['runname'] = runparams['runname']
        isacq['job'] = self.getISACJobData(runparams)

        ### finish alignment run
        alignrunq['isacrun'] = isacq
        alignrunq['hidden'] = False
        alignrunq['runname'] = runparams['runname']
        alignrunq['description'] = runparams['description']
        alignrunq['lp_filt'] = runparams['lowpass']
        alignrunq['hp_filt'] = runparams['highpass']
        alignrunq['bin'] = runparams['bin']

        ### setup alignment stack
        alignstackq = appiondata.ApAlignStackData()
        alignstackq['imagicfile'] = alignedPartStack
        alignstackq['avgmrcfile'] = "average.mrc"
        alignstackq['refstackfile'] = alignedClassStack
        alignstackq['iteration'] = self.lastiter
        alignstackq['path'] = appiondata.ApPathData(
            path=os.path.abspath(self.params['rundir']))
        alignstackq['alignrun'] = alignrunq
        ### check to make sure files exist
        alignimagicfilepath = os.path.join(self.params['rundir'],
                                           alignstackq['imagicfile'])
        if not os.path.isfile(alignimagicfilepath):
            apDisplay.printError("could not find stack file: " +
                                 alignimagicfilepath)
        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'] = apStack.getOnlyStackData(runparams['stackid'])
        alignstackq['boxsize'] = apFile.getBoxSize(alignimagicfilepath)[0]
        alignstackq['pixelsize'] = apStack.getStackPixelSizeFromStackId(
            self.params['stackid']) * self.params['bin']
        alignstackq['description'] = runparams['description']
        alignstackq['hidden'] = False
        alignstackq['num_particles'] = self.numPart

        ### insert
        if self.params['commit'] is True:
            alignstackq.insert()
        self.alignstackdata = alignstackq

        return
    def insertAlignmentRun(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 '" + self.params['runname'] +
                                 "' and path already exist in database")

        ### setup Reference preparation parameters, if given
        MRAq = appiondata.ApMultiRefAlignRunData()
        if self.params['refs'] is True:
            MRAq['lowpass_refs'] = self.params['lowpass_refs']
            MRAq['thresh_refs'] = self.params['thresh_refs']
            MRAq['maskrad_refs'] = self.params['maskrad_refs']

        ### setup Multi Reference Alignment Run
        MRAq['mirror'] = self.params['mirror']
        MRAq['center'] = self.params['center']
        MRAq['alignment_type'] = self.params['alignment_type']
        if self.params['alignment_type'].lower() == "all":
            MRAq['first_alignment'] = self.params['first_alignment']
        if self.params['alignment_type'].lower() == "brute_force":
            MRAq['num_orientations'] = self.params['num_orientations']
        MRAq['max_shift_orig'] = self.params['max_shift_orig']
        if self.params['center'] is True:
            MRAq['max_shift_this'] = self.params['max_shift_this']
        MRAq['samp_param'] = self.params['samp_param']
        MRAq['min_radius'] = self.params['minrad']
        MRAq['max_radius'] = self.params['minrad']
        MRAq['numiter'] = self.params['numiter']

        ### finish alignment run
        alignrunq['imagicMRA'] = MRAq
        alignrunq['hidden'] = False
        alignrunq['description'] = self.params['description']
        alignrunq['lp_filt'] = self.params['lowpass']
        alignrunq['hp_filt'] = self.params['highpass']
        alignrunq['bin'] = self.params['bin']

        ### setup alignment stack
        alignstackq = appiondata.ApAlignStackData()
        alignstackq['imagicfile'] = "alignstack.hed"
        alignstackq['avgmrcfile'] = "average.mrc"
        alignstackq['refstackfile'] = "references.hed"
        alignstackq['iteration'] = self.params['numiter']
        alignstackq['path'] = appiondata.ApPathData(
            path=os.path.abspath(self.params['rundir']))
        alignstackq['alignrun'] = alignrunq

        ### 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)
        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'] = apStack.getOnlyStackData(self.params['stackId'])
        alignstackq['boxsize'] = self.params['boxsize']
        alignstackq['pixelsize'] = self.params['apix']
        alignstackq['description'] = self.params['description']
        alignstackq['hidden'] = False
        alignstackq['num_particles'] = self.params['numpart']

        ### insert
        if self.params['commit'] is True:
            alignstackq.insert()
        self.alignstackdata = alignstackq

        return
コード例 #14
0
    def insertNoRefRun(self, imagicstack, 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 '" + self.params['runname'] +
                                 "' and path already exist in database")

        # create a norefParam object
        norefq = appiondata.ApSpiderNoRefRunData()
        norefq['runname'] = self.params['runname']
        norefq['particle_diam'] = 2.0 * self.params['partrad']
        norefq['first_ring'] = self.params['firstring']
        norefq['last_ring'] = self.params['lastring']
        norefq['init_method'] = self.params['initmethod']
        norefq['run_seconds'] = self.runtime

        ### finish alignment run
        alignrunq['norefrun'] = norefq
        alignrunq['hidden'] = False
        alignrunq['bin'] = self.params['bin']
        alignrunq['hp_filt'] = self.params['highpass']
        alignrunq['lp_filt'] = self.params['lowpass']
        alignrunq['description'] = self.params['description']

        # STOP HERE

        ### setup alignment stack
        alignstackq = appiondata.ApAlignStackData()
        alignstackq['alignrun'] = alignrunq
        alignstackq['imagicfile'] = os.path.basename(imagicstack)
        alignstackq['avgmrcfile'] = "average.mrc"
        alignstackq['alignrun'] = alignrunq
        alignstackq['iteration'] = 0
        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 file: " + avgmrcfile)
        alignstackq['stack'] = self.stack['data']
        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()

        ### create reference
        refq = appiondata.ApAlignReferenceData()
        refq['refnum'] = 1
        refq['iteration'] = 0
        refq['mrcfile'] = "template.mrc"
        #refpath = os.path.abspath(os.path.join(self.params['rundir'], "alignment"))
        refq['path'] = appiondata.ApPathData(
            path=os.path.abspath(self.params['rundir']))
        refq['alignrun'] = alignrunq

        ### insert particle data
        apDisplay.printColor("Inserting particle alignment data, please wait",
                             "cyan")
        for partdict in self.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'] = refq
            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']

            if insert is True:
                alignpartq.insert()

        return