コード例 #1
0
def reconstruction(_log
                   , ARTReconstructionExtraCommand
                   , WBPReconstructionExtraCommand
                   , FourierReconstructionExtraCommand
                   , Iteration_number
                   , DoParallel
                   , maskedFileNamesIter
                   , MpiJobSize
                   , NumberOfMpi
                   , NumberOfThreads
                   , ReconstructionMethod
                   , FourierMaxFrequencyOfInterest
                   , ARTLambda
                   , SymmetryGroup
                   , ReconstructionXmd
                   , ReconstructedVolume
                   , ResolSam
                   , ResolutionXmdPrevIterMax
                   , PaddingFactor
                   , ConstantToAddToFiltration
                   ):
    
    #if inout metadata is empty create a Blanck image
    if emptyMd(ReconstructionXmd):
        from protlib_utils import printLog
        img = Image()
        img.read(maskedFileNamesIter, DATA)
        #(x,y,z,n) = img.getDimensions()
        printLog("Metadata %s is empty. Creating a Black file named %s" % (ReconstructionXmd, ReconstructedVolume))
        #createEmptyFile(ReconstructedVolume,x,y,z,n)
        img.initRandom()
        img.write(ReconstructedVolume)
        return

    
    print '*********************************************************************'
    print '* Reconstruct volume using '
    if ReconstructionMethod == 'wbp':
        program = 'xmipp_reconstruct_wbp'
        parameters = ' -i ' + ReconstructionXmd + \
                    ' --doc ' + ReconstructionXmd + \
                    ' -o ' + ReconstructedVolume + \
                    ' --sym ' + SymmetryGroup + \
                    ' --weight --use_each_image '
        parameters = parameters + WBPReconstructionExtraCommand
                  
    elif ReconstructionMethod == 'art':
        program = 'xmipp_reconstruct_art'

        parameters = ' -i ' + ReconstructionXmd + \
                   ' -o ' + ReconstructedVolume + ' ' + \
                   ' --sym ' + SymmetryGroup + \
                   ' --thr ' + str(NumberOfThreads) + \
                   ' --WLS '
        if len(ARTLambda) > 1:
           parameters = parameters + ' -l ' + ARTLambda + ' '
        parameters = parameters + ARTReconstructionExtraCommand
        
        NumberOfMpi = 1
        NumberOfThreads = 1
        DoParallel = False
                
    elif ReconstructionMethod == 'fourier':
        
        if FourierMaxFrequencyOfInterest == -1:
                md = MetaData(ResolutionXmdPrevIterMax)
                id = md.firstObject()
                FourierMaxFrequencyOfInterest = md.getValue(MDL_RESOLUTION_FREQREAL, id)
                FourierMaxFrequencyOfInterest = ResolSam / FourierMaxFrequencyOfInterest + float(ConstantToAddToFiltration)
                if FourierMaxFrequencyOfInterest > 0.5:
                    FourierMaxFrequencyOfInterest = 0.5
                elif FourierMaxFrequencyOfInterest < 0.:
                    FourierMaxFrequencyOfInterest = 0.001

        program = 'xmipp_reconstruct_fourier'
        parameters = ' -i ' + ReconstructionXmd + \
                   ' -o ' + ReconstructedVolume + \
                   ' --sym ' + SymmetryGroup + \
                   ' --thr ' + str(NumberOfThreads) + \
                   ' --weight ' + \
                   ' --max_resolution ' + str(FourierMaxFrequencyOfInterest) + \
                   ' --padding ' + str(PaddingFactor) + ' ' + str(PaddingFactor)
 
    if (DoParallel):
        parameters = parameters + ' --mpi_job_size ' + str(MpiJobSize)
            
    runJob(_log
           , program
           , parameters
           , NumberOfMpi
           , NumberOfThreads
           )
コード例 #2
0
def angular_class_average(_log
                         , Align2DIterNr
                         , Align2dMaxChangeOffset
                         , Align2dMaxChangeRot
                         , CtfGroupDirectory
                         , CtfGroupRootName
                         , DiscardImages
                         , DiscardPercentage
                         , DiscardPercentagePerClass
                         , DoAlign2D
                         , DoComputeResolution
                         , DoCtfCorrection
                         , DocFileInputAngles
                         , DoParallel
                         , DoSaveImagesAssignedToClasses
                         , DoSplitReferenceImages
                         , InnerRadius
                         , MaxChangeOffset
                         , MinimumCrossCorrelation
                         , MpiJobSize
                         , NumberOfMpi
                         , NumberOfThreads
                         , OutClasses
                         , PaddingFactor
                         , ProjectLibraryRootName
                         ):
                             

    CtfGroupName = CtfGroupDirectory + '/' + CtfGroupRootName
    refname = str(ProjectLibraryRootName)
    baseTxtFile = refname[:-len('.stk')] 
    neighbFile = baseTxtFile + '.xmd'
	
    if emptyMd(DocFileInputAngles):
        print "Empty metadata file: %s" % DocFileInputAngles
        return

    parameters = ' -i ctfGroup[0-9][0-9][0-9][0-9][0-9][0-9]\$@' + DocFileInputAngles + \
                 ' --lib ' + refname.replace(".stk", ".doc") + \
                 ' -o ' + OutClasses
    if(DoSaveImagesAssignedToClasses):
        parameters += ' --save_images_assigned_to_classes'  
                  
    if(DiscardImages == 'maxCC'):
        parameters += ' --limit0 ' + MinimumCrossCorrelation
    elif(DiscardImages == 'percentage'):
        parameters += ' --limitRper ' + DiscardPercentage
    elif(DiscardImages == 'classPercentage'):
        parameters += ' --limitRclass ' + DiscardPercentagePerClass
    #else 'none'
        
    # On-the fly apply Wiener-filter correction and add all CTF groups together
    if (DoCtfCorrection):
        parameters += \
                   ' --wien ' + CtfGroupName + '_wien.stk' + \
                   ' --pad ' + str(PaddingFactor)
                   
    if (DoAlign2D == '1'):
        parameters += \
                  ' --iter ' + Align2DIterNr + \
                  ' --Ri ' + str(InnerRadius) + \
                  ' --Ro ' + str(OuterRadius)
                  
    if (DoComputeResolution and DoSplitReferenceImages):
        parameters += ' --split '
                  
    if (DoParallel):
        parameters = parameters + ' --mpi_job_size ' + str(MpiJobSize)

    runJob(_log,
           'xmipp_angular_class_average',
           parameters,
           NumberOfMpi * NumberOfThreads
           )