def getImgAssessmentStatus(imgdata): """ gets the assessment status (keep/reject) from the last assessment run keep = True reject = False unassessed = None """ ### this function should be modified in the future to allow for a particular assessment run if imgdata is None: return None assessquery = appiondata.ApAssessmentData() assessquery['image'] = imgdata assessdata = assessquery.query() if assessdata: #check results of only most recent run if assessdata[0]['selectionkeep'] == 1: return True elif assessdata[0]['selectionkeep'] == 0: return False return None
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
# all particles particles = qpart.query() # Find assessment of image that each particle is from. # This is messy because we want to query images without reading MRCs. assessments = {} akeep = [] areject = [] anone = [] for particle in particles: imgref = particle.special_getitem('image', dereference=False) imgid = imgref.dbid if imgid not in assessments: img = leginon.leginondata.AcquisitionImageData.direct_query( imgref.dbid, readimages=False) qassess = appiondata.ApAssessmentData(image=img) assessment = qassess.query(results=1) if assessment: assessments[imgid] = assessment[0]['selectionkeep'] else: assessments[imgid] = None assessment = assessments[imgid] if assessment is None: anone.append(particle) elif assessment: akeep.append(particle) else: areject.append(particle) print ' Total Particles:', len(particles) print ' Rejected', len(areject)