예제 #1
0
def computeAtomShifts(log,WorkingDir,NumberOfModes):
    fnOutDir=os.path.join(WorkingDir,"extra/distanceProfiles")
    createDir(log,fnOutDir)
    maxShift=[]
    maxShiftMode=[]
    for n in range(7,NumberOfModes+1):
        fhIn=open(os.path.join(WorkingDir,"modes/vec."+str(n)))
        md=MetaData()
        atomCounter=0;
        for line in fhIn:
            coord=line.split()
            x=float(coord[0])
            y=float(coord[1])
            z=float(coord[2])
            d=math.sqrt(x*x+y*y+z*z)
            if n==7:
                maxShift.append(d)
                maxShiftMode.append(7)
            else:
                if d>maxShift[atomCounter]:
                    maxShift[atomCounter]=d
                    maxShiftMode[atomCounter]=n
            atomCounter+=1
            md.setValue(MDL_NMA_ATOMSHIFT,d,md.addObject())
        md.write(os.path.join(fnOutDir,"vec"+str(n)+".xmd"))
        fhIn.close()
    md=MetaData()
    for i in range(len(maxShift)):
        id=md.addObject()
        md.setValue(MDL_NMA_ATOMSHIFT,maxShift[i],id)
        md.setValue(MDL_NMA_MODEFILE,os.path.join(WorkingDir,"modes/vec."+str(maxShiftMode[i]+1)),id)
    md.write(os.path.join(WorkingDir,'extra','maxAtomShifts.xmd'))
예제 #2
0
def animateModes(log,WorkingDir,LastMode,Amplitude,NFrames,Downsample,PseudoAtomThreshold,PseudoAtomRadius,Sampling,StructureType):
    createDir(log,os.path.join(WorkingDir,"extra/animations"))
    currentDir=os.getcwd()
    changeDir(log,WorkingDir)
    if StructureType=="EM":
        fn="pseudoatoms.pdb"
        runJob(log,"nma_animate_pseudoatoms.py","%s extra/vec_ani.pkl 7 %d %f extra/animations/animated_mode %d %d %f"%\
                  (fn,LastMode,Amplitude,NFrames,Downsample,PseudoAtomThreshold))
    else:
        fn="atoms.pdb"
    	runJob(log,"nma_animate_atoms.py","%s extra/vec_ani.pkl 7 %d %f extra/animations/animated_mode %d"%\
                  (fn,LastMode,Amplitude,NFrames))
    
    for mode in range(7,LastMode+1):
        fnAnimation="extra/animations/animated_mode_%03d"%mode
        fhCmd=open(fnAnimation+".vmd",'w')
        fhCmd.write("mol new "+os.path.join(WorkingDir,fnAnimation)+".pdb\n")
        fhCmd.write("animate style Loop\n")
        fhCmd.write("display projection Orthographic\n")
        if StructureType=="EM":
            fhCmd.write("mol modcolor 0 0 Beta\n")
            fhCmd.write("mol modstyle 0 0 Beads %f 8.000000\n"%(PseudoAtomRadius*Sampling))
        else:
            fhCmd.write("mol modcolor 0 0 Index\n")
            fhCmd.write("mol modstyle 0 0 Beads 1.000000 8.000000\n")
        fhCmd.write("animate speed 0.5\n")
        fhCmd.write("animate forward\n")
        fhCmd.close();
    
    changeDir(log,currentDir)
예제 #3
0
def reformatOutputPDB(log,WorkingDir,NumberOfModes):
    currentDir=os.getcwd()
    changeDir(log,WorkingDir)
    createDir(log,"modes")
    Natoms=countAtoms("atoms.pdb")
    fhIn=open('diagrtb.eigenfacs')
    fhAni=open('vec_ani.txt','w')
    for n in range(NumberOfModes):
        # Skip two lines
        fhIn.readline()
        fhIn.readline()
        fhOut=open('modes/vec.%d'%(n+1),'w')
        for i in range(Natoms):
            line=fhIn.readline()
            fhOut.write(line)
            fhAni.write(line.rstrip().lstrip()+" ")
        fhOut.close()
        if n!=(NumberOfModes-1):
            fhAni.write("\n")
    fhIn.close()
    fhAni.close()
    runJob(log,"nma_prepare_for_animate.py","")
    runJob(log,"rm","vec_ani.txt")
    moveFile(log,'vec_ani.pkl','extra/vec_ani.pkl')
    changeDir(log,currentDir)
예제 #4
0
def reformatOutput(log,WorkingDir):
    currentDir=os.getcwd()
    changeDir(log,WorkingDir)
    Natoms=countAtoms("pseudoatoms.pdb")
    runJob(log,"nma_reformat_vector_foranimate.pl","%d fort.11"%Natoms)
    runJob(log,"cat","vec.1* > vec_ani.txt")
    runJob(log,"rm","-f vec.1*")
    runJob(log,"nma_reformat_vector.pl","%d fort.11"%Natoms)
    createDir(log,"modes")
    runJob(log,"mv","-f vec.* modes")
    runJob(log,"nma_prepare_for_animate.py","")
    runJob(log,"rm","vec_ani.txt fort.11 matrice.sdijf")
    moveFile(log,'vec_ani.pkl','extra/vec_ani.pkl')
    changeDir(log,currentDir)
def estimateSingleCTF(log, WorkingDir, inputFile, DownsampleFactor, AutomaticDownsampling,
                      Voltage, SphericalAberration, AngPix, AmplitudeContrast, LowResolCutoff, 
                      HighResolCutoff,WinSize,MaxFocus,MinFocus,FastDefocus,MDL_TYPE):
    extraDir=os.path.join(WorkingDir,'extra')
    tmpDir=os.path.join(WorkingDir,'tmp')
    micrographName = os.path.basename(inputFile)
    shortname = os.path.splitext(micrographName)[0]
    micrographDir = os.path.join(extraDir,shortname)
    oroot="%s/xmipp_ctf"%micrographDir           

    if not os.path.exists(micrographDir):
        createDir(log,micrographDir)

    downsampleList=[DownsampleFactor]
    if AutomaticDownsampling:
        downsampleList.append(DownsampleFactor+1)
        if DownsampleFactor>=2:
            downsampleList.append(DownsampleFactor-1)
        else:
            downsampleList.append(max(DownsampleFactor/2.,1.))
    
    for DownsampleFactor in downsampleList:
        # Downsample if necessary
        deleteTmp=False
        if DownsampleFactor != 1:
            finalname = os.path.join(tmpDir,shortname + "_tmp.mrc")
            runJob(log,"xmipp_transform_downsample","-i %s -o %s --step %f --method fourier" % (inputFile,finalname,DownsampleFactor))
            deleteTmp=True
        else:
            finalname = inputFile
            
        # CTF estimation with Xmipp
        args="--micrograph "+finalname+\
             " --oroot "+oroot+\
             " --kV "+str(Voltage)+\
             " --Cs "+str(SphericalAberration)+\
             " --sampling_rate "+str(AngPix*DownsampleFactor)+\
             " --downSamplingPerformed "+str(DownsampleFactor)+\
             " --ctfmodelSize 256"+\
             " --Q0 "+str(AmplitudeContrast)+\
             " --min_freq "+str(LowResolCutoff)+\
             " --max_freq "+str(HighResolCutoff)+\
             " --pieceDim "+str(WinSize)+\
             " --defocus_range "+str((MaxFocus-MinFocus)*10000/2)+\
             " --defocusU "+str((MaxFocus+MinFocus)*10000/2)
        if (FastDefocus):
            args+=" --fastDefocus"
        


        runJob(log,'xmipp_ctf_estimate_from_micrograph', args)
        
        if deleteTmp:
            deleteFile(log, finalname)
        
        md = xmipp.MetaData()
        id = md.addObject()
        
        if MDL_TYPE == xmipp.MDL_MICROGRAPH_MOVIE:
            md.setValue(xmipp.MDL_MICROGRAPH_MOVIE,inputFile,id)
            md.setValue(xmipp.MDL_MICROGRAPH,('%05d@%s'%(1,inputFile)),id)
        else:
            md.setValue(xmipp.MDL_MICROGRAPH,inputFile,id)
            
        md.setValue(xmipp.MDL_PSD,oroot+".psd",id)
        md.setValue(xmipp.MDL_PSD_ENHANCED,oroot+"_enhanced_psd.xmp",id)
        md.setValue(xmipp.MDL_CTF_MODEL,oroot+".ctfparam",id)
        md.setValue(xmipp.MDL_IMAGE1,oroot+"_ctfmodel_quadrant.xmp",id)
        md.setValue(xmipp.MDL_IMAGE2,oroot+"_ctfmodel_halfplane.xmp",id)
        md.setValue(xmipp.MDL_CTF_DOWNSAMPLE_PERFORMED,float(DownsampleFactor),id)
        fnEval=os.path.join(micrographDir,"xmipp_ctf.xmd")
        md.write(fnEval)
        criterion="ctfCritFirstZero<5 OR ctfCritMaxFreq>20 OR ctfCritfirstZeroRatio<0.9 OR ctfCritfirstZeroRatio>1.1 OR "\
                  "ctfCritFirstMinFirstZeroRatio>10 OR ctfCritCorr13<0 OR ctfCritCtfMargin<0 OR ctfCritNonAstigmaticValidty<0.3 OR " \
                  "ctfCritNonAstigmaticValidty>25"
        runJob(log,"xmipp_ctf_sort_psds","-i %s"%(fnEval))
        fnRejected=os.path.join(tmpDir,shortname+"_rejected.xmd")
        runJob(log,"xmipp_metadata_utilities",'-i %s --query select "%s" -o %s'%(fnEval,criterion,fnRejected))
        md.read(fnRejected)
        if md.size()==0:
            break
예제 #6
0
def importTomogram(log, TomogramDir, TomogramRoot, params):
    createDir(log, TomogramDir)
    runJob(log, "xmipp_xray_import", params, NumberOfMpi=1)