예제 #1
0
	def printCtfData(self, ctfvalue):
		if ctfvalue is None:
			return
		defocusratio = ctfvalue['defocus2']/ctfvalue['defocus1']
		if 'acerun' in ctfvalue:
			method = getCtfMethod(ctfvalue)
			runname = ctfvalue['acerun']['name']
			sys.stderr.write("[%s]   method: %s | runname %s\n"%
			(apDisplay.colorString("CTF run", "blue"), method, runname))
		sys.stderr.write("[%s] def1: %.2e | def2: %.2e | angle: %.1f | ampcontr %.2f | defratio %.3f\n"%
			(apDisplay.colorString("CTF param", "blue"), ctfvalue['defocus1'], 
			ctfvalue['defocus2'], ctfvalue['angle_astigmatism'], 
			ctfvalue['amplitude_contrast'], defocusratio))
		if 'resolution_80_percent' in ctfvalue.keys() and ctfvalue['resolution_80_percent'] is not None:
			sys.stderr.write("[%s] conf_30-10: %s | conf_5peak: %s | res_0.8: %.1fA | res_0.5 %.1fA\n"%
				(apDisplay.colorString("CTF stats", "blue"), 
				apDisplay.colorProb(ctfvalue['confidence_30_10']), 
				apDisplay.colorProb(ctfvalue['confidence_5_peak']),
				ctfvalue['resolution_80_percent'], ctfvalue['resolution_50_percent']))
		#sys.stderr.write("[%s] conf: %s | conf_d: %s\n"%
		#	(apDisplay.colorString("CTF stats", "blue"), apDisplay.colorProb(ctfvalue['confidence']), 
		#	apDisplay.colorProb(ctfvalue['confidence_d'])))
		#apDisplay.colorProb(numlist[i])
		#time.sleep(3)
		return
	def runCommand(self, cmd):
		t0 = time.time()
		if self.params['showcmd'] is True:
			apDisplay.printColor("###################################", "magenta")
			sys.stderr.write(
				apDisplay.colorString("COMMAND: \n","magenta")
				+apDisplay.colorString(cmd, "cyan")+"\n")
			apDisplay.printColor("###################################", "cyan")
		try:
			if self.params['verbose'] is False:
				logf = open('testsuite-programs.log' ,'a')
				proc = subprocess.Popen(cmd, shell=True, 
					stdout=logf, stderr=logf)
			else:
				proc = subprocess.Popen(cmd, shell=True)
			proc.wait()
		except:
			apDisplay.printError("could not run command: "+cmd)
		runtime = time.time() - t0
		if self.params['showcmd'] is True:
			apDisplay.printColor("###################################", "cyan")
			apDisplay.printColor("command ran in "+apDisplay.timeString(runtime), "cyan")
		if runtime < 1:
			apDisplay.printError("command runtime was too short: "
				+apDisplay.timeString(runtime))
		elif runtime < 10:
			apDisplay.printWarning("command runtime was very short: "
				+apDisplay.timeString(runtime))
			return False

		if self.params['verbose'] is False:
			logf.close()

		return True
	def runCommand(self, cmd):
		t0 = time.time()
		if self.params['showcmd'] is True:
			apDisplay.printColor("###################################", "magenta")
			sys.stderr.write(
				apDisplay.colorString("COMMAND: \n","magenta")
				+apDisplay.colorString(cmd, "cyan")+"\n")
			apDisplay.printColor("###################################", "cyan")
		try:
			if self.params['verbose'] is False:
				proc = subprocess.Popen(cmd, shell=True, 
					stdout=subprocess.PIPE)#, stderr=subprocess.PIPE)
			else:
				proc = subprocess.Popen(cmd, shell=True)
			proc.wait()
		except:
			apDisplay.printWarning("could not run command: "+cmd)
			sys.exit(1)
			return False
		runtime = time.time() - t0
		if self.params['showcmd'] is True:
			apDisplay.printColor("###################################", "cyan")
			apDisplay.printColor("command ran in "+apDisplay.timeString(runtime), "cyan")
		if runtime < 10:
			apDisplay.printWarning("command runtime was very short: "
				+apDisplay.timeString(runtime))
			sys.exit(1)
			return False

		#self.timestamp = apParam.makeTimestamp()
		return True
def setImgViewerStatus(imgdata, status=None, msg=True):
	"""
	Function that sets the image status in the viewer
	False: Image was hidden
	True: Image is an exemplar
	None: Image is visible

	see 'ViewerImageStatus' table in dbemdata
	"""

	if status is False:
		statusVal = 'hidden'
	elif status is True:
		statusVal = 'exemplar'
	else:
		print "skipping set viewer status"
		return

	currentstatus = getImgViewerStatus(imgdata)

	if currentstatus is None:
		#insert new
		statusq = leginon.leginondata.ViewerImageStatus()
		statusq['image'] = imgdata
		statusq['status'] = statusVal
		statusq.insert()
	elif currentstatus != status:
		#update column
		dbconf=sinedon.getConfig('leginondata')
		db=sinedon.sqldb.sqlDB(**dbconf)
		q= ( "UPDATE "+dbconf['db']+".`ViewerImageStatus` "
			+"SET status = '"+statusVal
			+ ("' WHERE `REF|AcquisitionImageData|image`=%d" % (imgdata.dbid,)))
		db.execute(q)

	#check assessment
	if msg is True:
		finalassess = getImgViewerStatus(imgdata)
		imgname = apDisplay.short(imgdata['filename'])
		if finalassess is True:
			astr = apDisplay.colorString("exemplar", "green")
		elif finalassess is False:
			astr = apDisplay.colorString("hidden", "red")
		elif finalassess is None:
			astr = apDisplay.colorString("none", "yellow")
		apDisplay.printMsg("Final image assessment: "+astr+" ("+imgname+")")

	return
def getSymmetryFromReconRunId(reconrunid, msg=True):
        """
        get the symmetry from the last iteration of a refinement
        """
        refrundata = appiondata.ApRefineRunData.direct_query(reconrunid)
        refdataq = appiondata.ApRefineIterData()
        refdataq['refineRun'] = refrundata
        refdata = refdataq.query()
        uniqsym = refdata[0]['symmetry']
        if uniqsym is None:
                apDisplay.printWarning("symmetry is not saved during reconstruction!")
                apDisplay.printWarning("Using the symmetry of the initial model")
                modeldata = refrundata['initialModel']
                uniqsym = modeldata['symmetry']
        else:
                for data in refdata:
                        if uniqsym != data['symmetry']:
                                apDisplay.printWarning("symmetry is not consistent throughout reconstruction!")
                                apDisplay.printWarning("Using symmetry of last iteration")
                        uniqsym = data['symmetry']
        if msg is True:
                apDisplay.printMsg("selected symmetry group: "
                        +apDisplay.colorString("'"+uniqsym['eman_name']+"'", "cyan")
                        +" for recon run: "+str(reconrunid))
        return uniqsym
	def executeAce2Cmd(self, ace2cmd, verbose=False, showcmd=True, logfile=None):
		"""
		executes an EMAN command in a controlled fashion
		"""
		waited = False
		if showcmd is True:
			os.sys.stderr.write(apDisplay.colorString("ACE2: ","magenta")+ace2cmd+"\n")
		t0 = time.time()
		try:
			if logfile is not None:
				logf = open(logfile, 'a')
				ace2proc = subprocess.Popen(ace2cmd, shell=True, stdout=logf, stderr=logf)
			elif verbose is False:
				ace2proc = subprocess.Popen(ace2cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
			else:
				ace2proc = subprocess.Popen(ace2cmd, shell=True)
			if verbose is True:
				ace2proc.wait()
			else:
				### continuous check
				waittime = 2.0
				while ace2proc.poll() is None:
					if waittime > 10:
						waited = True
						os.sys.stderr.write(".")
					waittime *= 1.1
					time.sleep(waittime)
		except:
			apDisplay.printWarning("could not run ace2 command: "+ace2cmd)
			raise
		tdiff = time.time() - t0
		if tdiff > 20:
			apDisplay.printMsg("completed in "+apDisplay.timeString(tdiff))
		elif waited is True:
			print ""
def getSymmetryDataFromID(symid, msg=True):
        symdata = appiondata.ApSymmetryData.direct_query(int(symid))
        if not symdata:
                printSymmetries()
                apDisplay.printError("no symmetry associated with this id: "+str(symid))
        if msg is True:
                apDisplay.printMsg("Selected symmetry group: "
                        +apDisplay.colorString("%s -- %s"%(symdata['eman_name'].upper(), symdata['symmetry']), "cyan"))
        return symdata
def executeEmanCmd(emancmd, verbose=False, showcmd=True, logfile=None, fail=False):
        """
        executes an EMAN command in a controlled fashion
        """
        waited = False
        if showcmd is True:
                sys.stderr.write(apDisplay.colorString("EMAN: ","magenta")+emancmd+"\n")
        t0 = time.time()
        try:
                if logfile is not None:
                        logf = open(logfile, 'a')
                        emanproc = subprocess.Popen(emancmd, shell=True, 
                                stdout=logf, stderr=logf)
                elif verbose is False:
                        devnull = open('/dev/null', 'w')
                        emanproc = subprocess.Popen(emancmd, shell=True, 
                                stdout=devnull, stderr=devnull)
                else:
                        emanproc = subprocess.Popen(emancmd, shell=True)
                if verbose is True:
                        #emanproc.wait()
                        out, err = emanproc.communicate()
                        if out is not None and err is not None:
                                print "EMAN error", out, err
                else:
                        out, err = emanproc.communicate()
                        ### continuous check
                        waittime = 2.0
                        while emanproc.poll() is None:
                                if waittime > 10:
                                        waited = True
                                        sys.stderr.write(".")
                                waittime *= 1.1
                                time.sleep(waittime)
        except:
                apDisplay.printWarning("could not run eman command: "+emancmd)
                raise
        tdiff = time.time() - t0
        if tdiff > 20:
                apDisplay.printMsg("completed in "+apDisplay.timeString(tdiff))
        elif waited is True:
                print ""
        proc_code = emanproc.returncode
        if proc_code != 0:
                if proc_code == -11:
                        if fail is True:
                                apDisplay.printError("EMAN failed with Segmentation Fault")
                        else:
                                apDisplay.printWarning("EMAN failed with Segmentation Fault")
                else:
                        if fail is True:
                                apDisplay.printError("EMAN failed with subprocess error code %d" % proc_code)
                        else:
                                apDisplay.printWarning("EMAN failed with subprocess error code %d" % proc_code)
def getSymmetryDataFromID(symid, msg=True):
    symdata = appiondata.ApSymmetryData.direct_query(int(symid))
    if not symdata:
        printSymmetries()
        apDisplay.printError("no symmetry associated with this id: " +
                             str(symid))
    if msg is True:
        apDisplay.printMsg("Selected symmetry group: " + apDisplay.colorString(
            "%s -- %s" %
            (symdata['eman_name'].upper(), symdata['symmetry']), "cyan"))
    return symdata
def insertImgAssessmentStatus(imgdata,
                              runname="run1",
                              assessment=None,
                              msg=True):
    """
        Insert the assessment status
                keep = True
                reject = False
                unassessed = None
        """
    if assessment is True or assessment is False:
        assessrun = appiondata.ApAssessmentRunData()
        assessrun['session'] = imgdata['session']
        #override to ALWAYS be 'run1'
        #assessrun['name'] = runname
        assessrun['name'] = "run1"

        assessquery = appiondata.ApAssessmentData()
        assessquery['image'] = imgdata
        assessquery['assessmentrun'] = assessrun
        assessquery['selectionkeep'] = assessment
        assessquery.insert()
    else:
        apDisplay.printWarning("No image assessment made, invalid data: " +
                               str(assessment))

    #check assessment
    if msg is True:
        finalassess = getImgAssessmentStatus(imgdata)
        imgname = apDisplay.short(imgdata['filename'])
        if finalassess is True:
            astr = apDisplay.colorString("keep", "green")
        elif finalassess is False:
            astr = apDisplay.colorString("reject", "red")
        elif finalassess is None:
            astr = apDisplay.colorString("none", "yellow")
        apDisplay.printMsg("Final image assessment: " + astr + " (" + imgname +
                           ")")

    return True
def printSymmetries():
    symq = appiondata.ApSymmetryData()
    syms = symq.query()
    sys.stderr.write("ID  NAME  DESCRIPTION\n")
    sys.stderr.write("--  ----  -----------\n")
    syms.sort(compSymm)
    for s in syms:
        name = s['eman_name']
        name = re.sub('Icosahedral', 'Icos', name)
        sys.stderr.write(
            apDisplay.colorString(apDisplay.rightPadString(s.dbid, 3), "green")
            + " " + apDisplay.rightPadString(name, 5) + " " +
            apDisplay.rightPadString(s['description'], 60) + "\n")
def printSymmetries():
        symq = appiondata.ApSymmetryData()
        syms = symq.query()
        sys.stderr.write("ID  NAME  DESCRIPTION\n")
        sys.stderr.write("--  ----  -----------\n")
        syms.sort(compSymm)
        for s in syms:
                name = s['eman_name']
                name = re.sub('Icosahedral', 'Icos', name)
                sys.stderr.write(
                        apDisplay.colorString(apDisplay.rightPadString(s.dbid,3),"green")+" "
                        +apDisplay.rightPadString(name,5)+" "
                        +apDisplay.rightPadString(s['description'],60)+"\n"
                )
예제 #13
0
def insertImgAssessmentStatus(imgdata, runname="run1", assessment=None, msg=True):
	"""
	Insert the assessment status
		keep = True
		reject = False
		unassessed = None
	"""
	if assessment is True or assessment is False:
		assessrun = appiondata.ApAssessmentRunData()
		assessrun['session'] = imgdata['session']
		#override to ALWAYS be 'run1'
		#assessrun['name'] = runname
		assessrun['name'] = "run1"

		assessquery = appiondata.ApAssessmentData()
		assessquery['image'] = imgdata
		assessquery['assessmentrun'] = assessrun
		assessquery['selectionkeep'] = assessment
		assessquery.insert()
	else:
		apDisplay.printWarning("No image assessment made, invalid data: "+str(assessment))


	#check assessment
	if msg is True:
		finalassess = getImgAssessmentStatus(imgdata)
		imgname = apDisplay.short(imgdata['filename'])
		if finalassess is True:
			astr = apDisplay.colorString("keep", "green")
		elif finalassess is False:
			astr = apDisplay.colorString("reject", "red")
		elif finalassess is None:
			astr = apDisplay.colorString("none", "yellow")
		apDisplay.printMsg("Final image assessment: "+astr+" ("+imgname+")")

	return True
예제 #14
0
def runCmd(cmd,
           package="",
           verbose=False,
           showcmd=True,
           logfile=None,
           fail=False):
    """
	executes a command from any processing package in a controlled fashion
	"""
    waited = False
    if showcmd is True:
        sys.stderr.write(
            apDisplay.colorString(str(package) + ": ", "magenta") + cmd + "\n")
    t0 = time.time()
    try:
        if logfile is not None:
            logf = open(logfile, 'a')
            proc = subprocess.Popen(cmd, shell=True, stdout=logf, stderr=logf)
        elif verbose is False:
            devnull = open('/dev/null', 'w')
            proc = subprocess.Popen(cmd,
                                    shell=True,
                                    stdout=devnull,
                                    stderr=devnull)
        else:
            proc = subprocess.Popen(cmd, shell=True)
        if verbose is True:
            out, err = proc.communicate()
            if out is not None and err is not None:
                print "error", out, err
        else:
            out, err = proc.communicate()
            ### continuous check
            waittime = 2.0
            while proc.poll() is None:
                if waittime > 10:
                    waited = True
                    sys.stderr.write(".")
                waittime *= 1.1
                time.sleep(waittime)
    except:
        apDisplay.printWarning("could not run command: " + cmd)
        raise
    tdiff = time.time() - t0
    if tdiff > 20:
        apDisplay.printMsg("completed in " + apDisplay.timeString(tdiff))
    elif waited is True:
        print ""
예제 #15
0
def getSymmetryDataFromName(symtext='c1', msg=True):
	# find the symmetry entry (full symmetry name) in the database
	if len(symtext.split()) > 1:
		symdataq = appiondata.ApSymmetryData(symmetry=symtext.strip())
	else:
		# based on the text version from EMAN
		# first convert to lower case
		symtext = symtext.lower().strip()
		if symtext == "i":
			symtext = "icos"
		symdataq = appiondata.ApSymmetryData(eman_name=symtext)
	symdatas = symdataq.query()
	if not symdatas:
		apDisplay.printError("No symmetry named %s was found"%(symtext))
	# select oldest match
	symdata = symdatas[len(symdatas)-1]
	if msg is True:
		apDisplay.printMsg("Selected symmetry group: "
			+apDisplay.colorString("%s -- %s"%(symdata['eman_name'].upper(), symdata['symmetry']), "cyan"))
	return symdata
def getSymmetryDataFromName(symtext='c1', msg=True):
        # find the symmetry entry (full symmetry name) in the database
        if len(symtext.split()) > 1:
                symdataq = appiondata.ApSymmetryData(symmetry=symtext.strip())
        else:
                # based on the text version from EMAN
                # first convert to lower case
                symtext = symtext.lower().strip()
                if symtext == "i":
                        symtext = "icos"
                symdataq = appiondata.ApSymmetryData(eman_name=symtext)
        symdatas = symdataq.query()
        if not symdatas:
                apDisplay.printError("No symmetry named %s was found"%(symtext))
        # select oldest match
        symdata = symdatas[len(symdatas)-1]
        if msg is True:
                apDisplay.printMsg("Selected symmetry group: "
                        +apDisplay.colorString("%s -- %s"%(symdata['eman_name'].upper(), symdata['symmetry']), "cyan"))
        return symdata
def runCmd(cmd, package="", verbose=False, showcmd=True, logfile=None, fail=False):
        """
        executes a command from any processing package in a controlled fashion
        """
        waited = False
        if showcmd is True:
                sys.stderr.write(apDisplay.colorString(str(package)+": ","magenta")+cmd+"\n")
        t0 = time.time()
        try:
                if logfile is not None:
                        logf = open(logfile, 'a')
                        proc = subprocess.Popen(cmd, shell=True, 
                                stdout=logf, stderr=logf)
                elif verbose is False:
                        devnull = open('/dev/null', 'w')
                        proc = subprocess.Popen(cmd, shell=True, 
                                stdout=devnull, stderr=devnull)
                else:
                        proc = subprocess.Popen(cmd, shell=True)
                if verbose is True:
                        out, err = proc.communicate()
                        if out is not None and err is not None:
                                print "error", out, err
                else:
                        out, err = proc.communicate()
                        ### continuous check
                        waittime = 2.0
                        while proc.poll() is None:
                                if waittime > 10:
                                        waited = True
                                        sys.stderr.write(".")
                                waittime *= 1.1
                                time.sleep(waittime)
        except:
                apDisplay.printWarning("could not run command: "+cmd)
                raise
        tdiff = time.time() - t0
        if tdiff > 20:
                apDisplay.printMsg("completed in "+apDisplay.timeString(tdiff))
        elif waited is True:
                print ""
def executeEmanCmd(emancmd,
                   verbose=False,
                   showcmd=True,
                   logfile=None,
                   fail=False):
    """
        executes an EMAN command in a controlled fashion
        """
    waited = False
    if showcmd is True:
        sys.stderr.write(
            apDisplay.colorString("EMAN: ", "magenta") + emancmd + "\n")
    t0 = time.time()
    try:
        if logfile is not None:
            logf = open(logfile, 'a')
            emanproc = subprocess.Popen(emancmd,
                                        shell=True,
                                        stdout=logf,
                                        stderr=logf)
        elif verbose is False:
            devnull = open('/dev/null', 'w')
            emanproc = subprocess.Popen(emancmd,
                                        shell=True,
                                        stdout=devnull,
                                        stderr=devnull)
        else:
            emanproc = subprocess.Popen(emancmd, shell=True)
        if verbose is True:
            #emanproc.wait()
            out, err = emanproc.communicate()
            if out is not None and err is not None:
                print "EMAN error", out, err
        else:
            out, err = emanproc.communicate()
            ### continuous check
            waittime = 2.0
            while emanproc.poll() is None:
                if waittime > 10:
                    waited = True
                    sys.stderr.write(".")
                waittime *= 1.1
                time.sleep(waittime)
    except:
        apDisplay.printWarning("could not run eman command: " + emancmd)
        raise
    tdiff = time.time() - t0
    if tdiff > 20:
        apDisplay.printMsg("completed in " + apDisplay.timeString(tdiff))
    elif waited is True:
        print ""
    proc_code = emanproc.returncode
    if proc_code != 0:
        if proc_code == -11:
            if fail is True:
                apDisplay.printError("EMAN failed with Segmentation Fault")
            else:
                apDisplay.printWarning("EMAN failed with Segmentation Fault")
        else:
            if fail is True:
                apDisplay.printError(
                    "EMAN failed with subprocess error code %d" % proc_code)
            else:
                apDisplay.printWarning(
                    "EMAN failed with subprocess error code %d" % proc_code)