def getSiblingImgAssessmentStatus(imgdata): status = getImgAssessmentStatus(imgdata) if status is not None: return status siblingimgdata = apDefocalPairs.getDefocusPair(imgdata) if siblingimgdata: status = getImgAssessmentStatus(siblingimgdata) return status
def getDefocPairParticles(imgdata, selectionid, particlelabel=None): ### get defocal pair if imgdata['preset'] is not None: defimgdata = apDefocalPairs.getDefocusPair(imgdata) else: # For pairs from Leginon Manual Application defimgdata = apDefocalPairs.getManualDefocusPair(imgdata) if defimgdata is None: apDisplay.printWarning( "Could not find defocal pair for image %s (id %d)" % (apDisplay.short(imgdata['filename']), imgdata.dbid)) return ([], {'shiftx': 0, 'shifty': 0, 'scale': 1}) apDisplay.printMsg( "Found defocus pair %s (id %d) for image %s (id %d)" % (apDisplay.short(defimgdata['filename']), defimgdata.dbid, apDisplay.short(imgdata['filename']), imgdata.dbid)) ### get particles partq = appiondata.ApParticleData() partq['image'] = defimgdata partq['selectionrun'] = appiondata.ApSelectionRunData.direct_query( selectionid) if particlelabel is not None: partq['label'] = particlelabel partdatas = partq.query() apDisplay.printMsg("Found %d particles for defocal pair %s (id %d)" % ( len(partdatas), apDisplay.short(defimgdata['filename']), defimgdata.dbid, )) if len(partdatas) == 0: return ([], {'shiftx': 0, 'shifty': 0, 'scale': 1}) ### get shift information has_tried = False while True: shiftq = appiondata.ApImageTransformationData() shiftq['image1'] = defimgdata shiftdatas = shiftq.query() if shiftdatas: shiftdata = shiftdatas[0] apDisplay.printMsg( "Shifting particles by %.1f,%.1f (%d X)" % (shiftdata['shiftx'], shiftdata['shifty'], shiftdata['scale'])) break else: if has_tried == True: apDisplay.printError( "No shift inserted to database after one try") apDisplay.printMsg("Calculating shift....") shiftpeak = apDefocalPairs.getShift(defimgdata, imgdata) apDefocalPairs.insertShift(defimgdata, imgdata, shiftpeak) has_tried = True return (partdatas, shiftdata)
def getSiblingImgCompleteStatus(imgdata): ''' Get the assessment status for sibling. Uses getImgCompleteStatus method to include viewer_status assessment ''' siblingimgdata = apDefocalPairs.getDefocusPair(imgdata) if siblingimgdata: status = getImgCompleteStatus(siblingimgdata) else: status = None return status
def getDefocPairParticles(imgdata, selectionid, particlelabel=None): ### get defocal pair if imgdata['preset'] is not None: defimgdata = apDefocalPairs.getDefocusPair(imgdata) else: # For pairs from Leginon Manual Application defimgdata = apDefocalPairs.getManualDefocusPair(imgdata) if defimgdata is None: apDisplay.printWarning("Could not find defocal pair for image %s (id %d)" %(apDisplay.short(imgdata['filename']), imgdata.dbid)) return ([], {'shiftx':0, 'shifty':0, 'scale':1}) apDisplay.printMsg("Found defocus pair %s (id %d) for image %s (id %d)" %(apDisplay.short(defimgdata['filename']), defimgdata.dbid, apDisplay.short(imgdata['filename']), imgdata.dbid)) ### get particles partq = appiondata.ApParticleData() partq['image'] = defimgdata partq['selectionrun'] = appiondata.ApSelectionRunData.direct_query(selectionid) if particlelabel is not None: partq['label'] = particlelabel partdatas = partq.query() apDisplay.printMsg("Found %d particles for defocal pair %s (id %d)" %(len(partdatas), apDisplay.short(defimgdata['filename']), defimgdata.dbid,)) if len(partdatas) == 0: return ([], {'shiftx':0, 'shifty':0, 'scale':1}) ### get shift information has_tried = False while True: shiftq = appiondata.ApImageTransformationData() shiftq['image1'] = defimgdata shiftdatas = shiftq.query() if shiftdatas: shiftdata = shiftdatas[0] apDisplay.printMsg("Shifting particles by %.1f,%.1f (%d X)" %(shiftdata['shiftx'], shiftdata['shifty'], shiftdata['scale'])) break else: if has_tried == True: apDisplay.printError("No shift inserted to database after one try") apDisplay.printMsg("Calculating shift....") shiftpeak = apDefocalPairs.getShift(defimgdata, imgdata) apDefocalPairs.insertShift(defimgdata, imgdata, shiftpeak) has_tried = True return (partdatas, shiftdata)
def generateParticleParams(params,modeldata,initparfile='params.0.par'): params['inpar']=os.path.join(params['rundir'],initparfile) apDisplay.printMsg("Creating parameter file: "+params['inpar']) params['mode']=3 stackdata=getStackParticlesInOrder(params) first_imageid = stackdata[0]['particle']['image'].dbid f=open(params['inpar'],'w') params['noClassification']=0 if params['reconiterid']: iterdata = apRecon.getRefineIterDataFromIterationId(params['reconiterid']) sym_name = modeldata['symmetry']['symmetry'] print "Writing out particle parameters" if 'last' not in params: params['last'] = len(stackdata) for i, particle in enumerate(stackdata[:params['last']]): # defaults particleparams = initializeParticleParams(i) # for helical reconstructions, film is helix number if particle['particle']['helixnum']: imgid=particle['particle']['image'].dbid helix=particle['particle']['helixnum'] try: if params['lastimgid']!=imgid or params['lasthelix']!=helix: params['totalHelix']+=1 except: params['totalHelix']=1 params['lastimgid']=imgid params['lasthelix']=helix particleparams['film']=params['totalHelix'] else: particleparams['film']=particle['particle']['image'].dbid - first_imageid + 1 # extra particle number information not read by Frealign particleparams['pnumber']=particle['particleNumber'] imagedata=particle['particle']['image'] if params['noctf'] is False: if params['defocpair'] is True: imagedata = apDefocalPairs.getDefocusPair(imagedata) # get tilted parameters first: if params['ctftilt'] is True: ctfdata = ctfdb.getBestTiltCtfValueForImage(imagedata) if ctfdata is None: apDisplay.printError("Failed to get ctf parameters") # get x,y coordinate of the particle nx = particle['particle']['xcoord'] ny = particle['particle']['ycoord'] df1,df2 = ctfdb.getParticleTiltDefocus(ctfdata,imagedata,nx,ny) # use defocus & astigmatism values particleparams['df1']=abs(df1) particleparams['df2']=abs(df2) particleparams['angast']=ctfdata['angle_astigmatism'] else: # first see if there are ctf values ctfdata, confidence=ctfdb.getBestCtfValueForImage(imagedata, msg=False,method=params['ctfmethod']) ## Do we really want value from any method if it is specified? if ctfdata is None: ctfdata, confidence=ctfdb.getBestCtfValueForImage(imagedata, msg=False) if ctfdata is not None: # use defocus & astigmatism values particleparams['df1']=abs(ctfdata['defocus1']*1e10) particleparams['df2']=abs(ctfdata['defocus2']*1e10) particleparams['angast']=ctfdata['angle_astigmatism'] # if using parameters from previous reconstruction if params['reconiterid'] is not None: params['mode']=1 getStackParticleEulersForIteration(params,particle['particleNumber']) fr_eulers = convertAppionEmanEulersToFrealign(params['eman_orient'],sym_name) particleparams['psi'] = fr_eulers['psi'] particleparams['theta'] = fr_eulers['theta'] particleparams['phi'] = fr_eulers['phi'] particleparams['shx']=-params['eman_orient']['shiftx'] particleparams['shy']=-params['eman_orient']['shifty'] if params['eman_orient']['mirror'] is True: particleparams['shx']*=-1 writeParticleParamLine(particleparams,f) f.close()
def generateParticleParams(params, modeldata, initparfile='params.0.par'): params['inpar'] = os.path.join(params['rundir'], initparfile) apDisplay.printMsg("Creating parameter file: " + params['inpar']) params['mode'] = 3 stackdata = getStackParticlesInOrder(params) first_imageid = stackdata[0]['particle']['image'].dbid f = open(params['inpar'], 'w') params['noClassification'] = 0 if params['reconiterid']: iterdata = apRecon.getRefineIterDataFromIterationId( params['reconiterid']) sym_name = modeldata['symmetry']['symmetry'] print "Writing out particle parameters" if 'last' not in params: params['last'] = len(stackdata) for i, particle in enumerate(stackdata[:params['last']]): # defaults particleparams = initializeParticleParams(i) # for helical reconstructions, film is helix number if particle['particle']['helixnum']: imgid = particle['particle']['image'].dbid helix = particle['particle']['helixnum'] try: if params['lastimgid'] != imgid or params['lasthelix'] != helix: params['totalHelix'] += 1 except: params['totalHelix'] = 1 params['lastimgid'] = imgid params['lasthelix'] = helix particleparams['film'] = params['totalHelix'] else: particleparams['film'] = particle['particle'][ 'image'].dbid - first_imageid + 1 # extra particle number information not read by Frealign particleparams['pnumber'] = particle['particleNumber'] imagedata = particle['particle']['image'] if params['noctf'] is False: if params['defocpair'] is True: imagedata = apDefocalPairs.getDefocusPair(imagedata) # get tilted parameters first: if params['ctftilt'] is True: ctfdata = ctfdb.getBestTiltCtfValueForImage(imagedata) if ctfdata is None: apDisplay.printError("Failed to get ctf parameters") # get x,y coordinate of the particle nx = particle['particle']['xcoord'] ny = particle['particle']['ycoord'] df1, df2 = ctfdb.getParticleTiltDefocus( ctfdata, imagedata, nx, ny) # use defocus & astigmatism values particleparams['df1'] = abs(df1) particleparams['df2'] = abs(df2) particleparams['angast'] = ctfdata['angle_astigmatism'] else: # first see if there are ctf values ctfdata, confidence = ctfdb.getBestCtfValueForImage( imagedata, msg=False, method=params['ctfmethod']) ## Do we really want value from any method if it is specified? if ctfdata is None: ctfdata, confidence = ctfdb.getBestCtfValueForImage( imagedata, msg=False) if ctfdata is not None: # use defocus & astigmatism values particleparams['df1'] = abs(ctfdata['defocus1'] * 1e10) particleparams['df2'] = abs(ctfdata['defocus2'] * 1e10) particleparams['angast'] = ctfdata['angle_astigmatism'] # if using parameters from previous reconstruction if params['reconiterid'] is not None: params['mode'] = 1 getStackParticleEulersForIteration(params, particle['particleNumber']) fr_eulers = convertAppionEmanEulersToFrealign( params['eman_orient'], sym_name) particleparams['psi'] = fr_eulers['psi'] particleparams['theta'] = fr_eulers['theta'] particleparams['phi'] = fr_eulers['phi'] particleparams['shx'] = -params['eman_orient']['shiftx'] particleparams['shy'] = -params['eman_orient']['shifty'] if params['eman_orient']['mirror'] is True: particleparams['shx'] *= -1 writeParticleParamLine(particleparams, f) f.close()