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 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 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()
Esempio n. 8
0
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()