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