def runCLTomo(log, WorkingDir, params, nproc): runJob(log,'xmipp_mpi_classify_CLTomo','%d %s'%(nproc,params)) levelFiles=glob.glob(WorkingDir+"/extra/results_classes_level*.xmd") if levelFiles: levelFiles.sort() lastLevelFile=levelFiles[-1] createLink(log,lastLevelFile,os.path.join(WorkingDir,'results.xmd'))
def postEvaluation(log,WorkingDir): levelFiles=glob.glob(os.path.join(WorkingDir,"extra/level_??/level_classes_core.xmd")) if levelFiles: levelFiles.sort() lastLevelFile=levelFiles[-1] createLink(log,lastLevelFile,os.path.join(WorkingDir,'classes_core.xmd')) levelFiles=glob.glob(os.path.join(WorkingDir,"extra/level_??/level_classes_stable_core.xmd")) if levelFiles: levelFiles.sort() lastLevelFile=levelFiles[-1] createLink(log,lastLevelFile,os.path.join(WorkingDir,'classes_stable_core.xmd'))
def postCl2d(log, WorkingDir, NumberOfReferences): levelDirs=glob.glob(os.path.join(WorkingDir,"extra/level_??")) createLink(log,os.path.join(WorkingDir,"extra/images.xmd"),os.path.join(WorkingDir,"images.xmd")) if levelDirs: levelDirs.sort() lastLevelDir=levelDirs[-1] fnLastLevelFile=os.path.join(lastLevelDir,"level_classes.xmd") from protlib_xmipp import getMdSize size = getMdSize("classes@"+fnLastLevelFile) if size == NumberOfReferences: createLink(log, fnLastLevelFile, os.path.join(WorkingDir,"classes.xmd"))
def rewriteClassBlock(log,WorkingDir,ExtraDir): fnClassMetadata=os.path.join(ExtraDir,"kerdensom_classes.xmd") fnClass="classes@%s"%fnClassMetadata fnClassStack=os.path.join(ExtraDir,"classes.stk") mD = MetaData(fnClass) counter = 1 for id in mD: mD.setValue(MDL_IMAGE,"%06d@%s"%(counter,fnClassStack),id) counter += 1 mD.write(fnClass,MD_APPEND) createLink(log,fnClassMetadata,os.path.join(WorkingDir,"classes.xmd")) createLink(log,os.path.join(ExtraDir,"kerdensom_images.xmd"),os.path.join(WorkingDir,"images.xmd"))
def createAcquisition(log,InputFile,WorkingDir,DoResize,NewSize): fnAcqIn = findAcquisitionInfo(InputFile) if not fnAcqIn is None: fnAcqOut = getProtocolFilename('acquisition', WorkingDir=WorkingDir) if not DoResize: createLink(log, fnAcqIn, fnAcqOut) else: md = MetaData(fnAcqIn) id = md.firstObject() Ts = md.getValue(MDL_SAMPLINGRATE, id) (Xdim, Ydim, Zdim, Ndim, _) = MetaDataInfo(InputFile) downsampling = float(Xdim)/NewSize; md.setValue(MDL_SAMPLINGRATE,Ts*downsampling,id) md.write(getProtocolFilename('acquisition', WorkingDir=WorkingDir))
def createResults(log , CTFDatName , DoCtfCorrection , inDocfile , listWithResultVolume , resultsImages , resultsClasses3DRef , resultsClasses3DRefDefGroup , resultsVolumes , selFileName , workingDir ): ''' Create standard output results_images, result_classes''' from os import remove from os.path import exists #create metadata file with volume names mdVolume = MetaData() for resultVolume in listWithResultVolume: objId = mdVolume.addObject() mdVolume.setValue(MDL_IMAGE,resultVolume,objId) #link also last iteration volumes createLink(log,resultVolume,join(workingDir, basename(resultVolume))) mdVolume.write(resultsVolumes) #read file with results allExpImagesinDocfile = FileName() all_exp_images="all_exp_images" allExpImagesinDocfile.compose(all_exp_images, inDocfile) md = MetaData(allExpImagesinDocfile) #read file with ctfs mdOut = MetaData() if DoCtfCorrection: #read only image and ctf_model mdOut = MetaData() mdCTF = MetaData() mdCTF.read(CTFDatName, [MDL_IMAGE, MDL_CTF_MODEL]) md.addIndex(MDL_IMAGE) mdCTF.addIndex(MDL_IMAGE) mdOut.joinNatural(md, mdCTF) else: mdOut = MetaData(md)#becareful with copy metadata since it only copies pointers mdref3D = MetaData() mdrefCTFgroup = MetaData() mdref3D.aggregate(mdOut, AGGR_COUNT, MDL_REF3D, MDL_REF3D, MDL_COUNT) mdrefCTFgroup.aggregate(mdOut, AGGR_COUNT, MDL_DEFGROUP, MDL_DEFGROUP, MDL_COUNT) #total number Image numberImages = mdOut.size() #total number CTF numberDefocusGroups = mdrefCTFgroup.size() #total number volumes numberRef3D = mdref3D.size() fnResultImages=FileName() fnResultClasses=FileName() fnResultImages.compose("images",resultsImages) comment = " numberImages=%d..................................................... "%numberImages comment += " numberDefocusGroups=%d................................................."%numberDefocusGroups comment += " numberRef3D=%d........................................................."%numberRef3D # mdAux1 = MetaData() mdAux2 = MetaData() mdAux1.read(selFileName,[MDL_IMAGE,MDL_ITEM_ID]) mdAux2.join1(mdOut, mdAux1, MDL_IMAGE, LEFT_JOIN) mdAux2.setComment(comment) mdAux2.write(fnResultImages) # #make query and store ref3d with all for id in mdref3D: ref3D = mdref3D.getValue(MDL_REF3D, id) md.importObjects(mdOut, MDValueEQ(MDL_REF3D, ref3D)) fnResultClasses.compose(("images_ref3d%06d"%ref3D),resultsClasses3DRef) md.write(fnResultClasses,MD_APPEND) md2=MetaData() for id in mdref3D: ref3D = mdref3D.getValue(MDL_REF3D, id) #a multiquey would be better but I do not know how to implement it in python md.importObjects(mdOut, MDValueEQ(MDL_REF3D, ref3D)) for id in mdrefCTFgroup: defocusGroup = mdrefCTFgroup.getValue(MDL_DEFGROUP, id) md2.importObjects(md, MDValueEQ(MDL_DEFGROUP, defocusGroup)) fnResultClasses.compose(("images_ref3d%06d_defocusGroup%06d"%(ref3D,defocusGroup)),resultsClasses3DRefDefGroup) md2.write(fnResultClasses,MD_APPEND)