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'))
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)
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)
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
def importTomogram(log, TomogramDir, TomogramRoot, params): createDir(log, TomogramDir) runJob(log, "xmipp_xray_import", params, NumberOfMpi=1)