Example #1
0
 def createBinaryLink(fn):
     """ Just create a link named .mrcs to Relion understand 
     that it is a binary stack file and not a volume.
     """
     newFn = getUniqueFileName(fn, extension)
     createLink(fn, newFn)
     return newFn
 def createChimeraScript(self, volume, pdb):
     """ Create a chimera script to visualize a pseudoatoms pdb
     obteined from a given EM 3d volume.
     A property will be set in the pdb object to 
     store the location of the script.
     """
     pseudoatoms = pdb.getFileName()
     scriptFile = pseudoatoms + '_chimera.cmd'
     pdb._chimeraScript = String(scriptFile)
     sampling = volume.getSamplingRate()
     radius = sampling * self.pseudoAtomRadius.get() 
     fnIn = volume.getFileName()
     localInputFn = self._getBasePath(fnIn)
     createLink(fnIn, localInputFn)
     fhCmd = open(scriptFile, 'w')
     fhCmd.write("open %s\n" % basename(pseudoatoms))
     fhCmd.write("rangecol bfactor,a 0 white 1 red\n")
     fhCmd.write("setattr a radius %f\n" % radius)
     fhCmd.write("represent sphere\n")
     fhCmd.write("open %s\n" % basename(localInputFn))
      
     threshold = 0.01
     if self.maskMode == NMA_MASK_THRE:
         self.maskThreshold.get()
     xdim = volume.getDim()[0]
     origin = xdim / 2
     fhCmd.write("volume #1 level %f transparency 0.5 voxelSize %f originIndex %d\n" % (threshold, sampling, origin))
     fhCmd.close()
Example #3
0
    def processMovieStep(self, movieId, movieFn, *args):
        movieFolder = self._getMovieFolder(movieId)
        movieName = basename(movieFn)
        #export SCIPION_DEBUG=1 # passwd=a
        #startDebugger()

        if self._filterMovie(movieId, movieFn):
            makePath(movieFolder)
            createLink(movieFn, join(movieFolder, movieName))
            toDelete = [movieName]
    
            if movieName.endswith('bz2'):
                movieMrc = movieName.replace('.bz2', '') # we assume that if compressed the name ends with .mrc.bz2
                toDelete.append(movieMrc)
                if not exists(movieMrc):
                    self.runJob('bzip2', '-d -f %s' % movieName, cwd=movieFolder)
            else:
                movieMrc = movieName
            
            self.info("Processing movie: %s" % movieMrc)
            
            if movieMrc.endswith('.em'):
                movieMrc = movieMrc + ":ems"

            self._processMovie(movieId, movieMrc, movieFolder, *args)
            
            if self.cleanMovieData:
                cleanPath(movieFolder)
            else:
                self.info('Clean movie data DISABLED. Movie folder will remain in disk!!!')
Example #4
0
 def createBinaryLink(fn):
     """ Just create a link named .mrcs to Relion understand 
     that it is a binary stack file and not a volume.
     """
     newFn = join(outputDir, replaceBaseExt(fn, extension))
     createLink(fn, newFn)
     return newFn
Example #5
0
    def processMovieStep(self, movieId, movieFn, *args):
        movieFolder = self._getMovieFolder(movieId)
        movieName = basename(movieFn)

        if self._filterMovie(movieId, movieFn):
            makePath(movieFolder)
            createLink(movieFn, join(movieFolder, movieName))
            toDelete = [movieName]
    
            if movieName.endswith('bz2'):
                # We assume that if compressed the name ends with .mrc.bz2
                movieMrc = movieName.replace('.bz2', '')
                toDelete.append(movieMrc)
                if not exists(movieMrc):
                    self.runJob('bzip2', '-d -f %s' % movieName, cwd=movieFolder)

            elif movieName.endswith('tbz'):
                # We assume that if compressed the name ends with .tbz
                movieMrc = movieName.replace('.tbz', '.mrc')
                toDelete.append(movieMrc)
                if not exists(movieMrc):
                    self.runJob('tar', 'jxf %s' % movieName, cwd=movieFolder)
            else:
                movieMrc = movieName
            
            self.info("Processing movie: %s" % movieMrc)
            
            self._processMovie(movieId, movieMrc, movieFolder, *args)
            
            if self.cleanMovieData:
                print "erasing.....movieFolder: ", movieFolder
                os.system('rm -rf %s' % movieFolder)
#                 cleanPath(movieFolder)
            else:
                self.info('Clean movie data DISABLED. Movie folder will remain in disk!!!')
    def createChimeraScript(self, volume, pdb):
        """ Create a chimera script to visualize a pseudoatoms pdb
        obteined from a given EM 3d volume.
        A property will be set in the pdb object to 
        store the location of the script.
        """
        pseudoatoms = pdb.getFileName()
        scriptFile = pseudoatoms + '_chimera.cmd'
        pdb._chimeraScript = String(scriptFile)
        sampling = volume.getSamplingRate()
        radius = sampling * self.pseudoAtomRadius.get()
        fnIn = volume.getFileName()
        localInputFn = self._getBasePath(fnIn)
        createLink(fnIn, localInputFn)
        fhCmd = open(scriptFile, 'w')
        fhCmd.write("open %s\n" % basename(pseudoatoms))
        fhCmd.write("rangecol bfactor,a 0 white 1 red\n")
        fhCmd.write("setattr a radius %f\n" % radius)
        fhCmd.write("represent sphere\n")
        fhCmd.write("open %s\n" % basename(localInputFn))

        threshold = 0.01
        if self.maskMode == NMA_MASK_THRE:
            self.maskThreshold.get()
        xdim = volume.getDim()[0]
        origin = xdim / 2
        fhCmd.write(
            "volume #1 level %f transparency 0.5 voxelSize %f originIndex %d\n"
            % (threshold, sampling, origin))
        fhCmd.close()
Example #7
0
 def convertToPseudoAtomsStep(self, inputStructure, fnIn, fnMask, prefix):
     XmippProtConvertToPseudoAtomsBase.convertToPseudoAtomsStep(self, fnIn,
                                                                fnMask,
                                                                prefix)
     self.createChimeraScriptStep(inputStructure, fnIn, prefix)
     createLink(self._getPath("pseudoatoms%s.pdb" % prefix),
                self._getPath("pseudoatoms.pdb"))
Example #8
0
 def linkMrcToMrcs(fn):
     """ Just create a link named .mrc to Eman understand 
     that it is a mrc binary stack.
     """
     newFn = join(outputDir, replaceBaseExt(fn, 'mrcs'))
     createLink(fn, newFn)
     return newFn
Example #9
0
 def linkMrcToMrcs(fn):
     """ Just create a link named .mrc to Eman understand 
     that it is a mrc binary stack.
     """
     newFn = join(outputDir, replaceBaseExt(fn, 'mrcs'))
     createLink(fn, newFn)
     return newFn
Example #10
0
    def _processMovie(self, movieId, movieName, movieFolder):
        """call program here"""
        # if not mrc convert format to mrc
        # special case is mrc but ends in mrcs
        inMovieName = os.path.join(movieFolder, movieName)
        if movieName.endswith(".mrc"):
            movieNameAux = inMovieName
        elif movieName.endswith(".mrcs"):
            movieNameAux = pwutils.replaceExt(inMovieName, "mrc")
            createLink(inMovieName, movieNameAux)
            movieNameAux = pwutils.replaceExt(movieName, "mrc")
        else:
            micFnMrc = pwutils.replaceExt(inMovieName, "mrc")
            ImageHandler().convert(inMovieName, micFnMrc, DT_FLOAT)
            movieNameAux = pwutils.replaceExt(movieName, "mrc")

        # get number of frames
        if self.alignFrameRange == -1:
            numberOfFramesPerMovie = self.inputMovies.get().getDimensions()[3]
        else:
            numberOfFramesPerMovie = self.alignFrameRange.get()

        doApplyDoseFilter = self.doApplyDoseFilter.get()
        exposurePerFrame = self.exposurePerFrame.get()
        self._argsUnblur(
            movieNameAux, movieFolder, movieId, numberOfFramesPerMovie, doApplyDoseFilter, exposurePerFrame
        )
        try:

            self.runJob(self._program, self._args, cwd=movieFolder)
        except:
            print("ERROR: Movie %s failed\n" % movieName)

        logFile = self._getLogFile(movieId)
Example #11
0
 def createBinaryLink(fn):
     """ Just create a link named .mrcs to Relion understand 
     that it is a binary stack file and not a volume.
     """
     newFn = getUniqueFileName(fn, extension)
     createLink(fn, newFn)
     return newFn
Example #12
0
 def copyPdbStep(self, inputFn, localFn, isEM):
     """ Copy the input pdb file and also create a link 'atoms.pdb' """
     copyFile(inputFn, localFn)
     if isEM:
         fnOut=self._getPath('pseudoatoms.pdb')
     else:
         fnOut=self._getPath('atoms.pdb')
     if not os.path.exists(fnOut):
         createLink(localFn, fnOut)
Example #13
0
 def copyPdbStep(self, inputFn, localFn, isEM):
     """ Copy the input pdb file and also create a link 'atoms.pdb' """
     copyFile(inputFn, localFn)
     if isEM:
         fnOut = self._getPath('pseudoatoms.pdb')
     else:
         fnOut = self._getPath('atoms.pdb')
     if not os.path.exists(fnOut):
         createLink(localFn, fnOut)
    def importMicrographs(self, pattern, suffix, voltage, sphericalAberration,
                          amplitudeContrast):
        """ Copy images matching the filename pattern
        Register other parameters.
        """
        filePaths = glob(expandPattern(pattern))

        #imgSet = SetOfMicrographs(filename=self.micsPairsSqlite, prefix=suffix)
        imgSet = self._createSetOfMicrographs(suffix=suffix)
        acquisition = imgSet.getAcquisition()
        # Setting Acquisition properties
        acquisition.setVoltage(voltage)
        acquisition.setSphericalAberration(sphericalAberration)
        acquisition.setAmplitudeContrast(amplitudeContrast)

        # Call a function that should be implemented by each subclass
        self._setOtherPars(imgSet)

        outFiles = [imgSet.getFileName()]
        imgh = ImageHandler()
        img = imgSet.ITEM_TYPE()
        n = 1
        size = len(filePaths)

        filePaths.sort()

        for i, fn in enumerate(filePaths):
            #             ext = os.path.splitext(basename(f))[1]
            dst = self._getExtraPath(basename(fn))
            if self.copyToProj:
                copyFile(fn, dst)
            else:
                createLink(fn, dst)

            if n > 1:
                for index in range(1, n + 1):
                    img.cleanObjId()
                    img.setFileName(dst)
                    img.setIndex(index)
                    imgSet.append(img)
            else:
                img.cleanObjId()
                img.setFileName(dst)
                # Fill the micName if img is a Micrograph.
                self._fillMicName(img, fn, pattern)
                imgSet.append(img)
            outFiles.append(dst)

            sys.stdout.write("\rImported %d/%d" % (i + 1, size))
            sys.stdout.flush()

        print "\n"

        imgSet.write()

        return imgSet
Example #15
0
    def importMicrographs(self, pattern, suffix, voltage, sphericalAberration, amplitudeContrast):
        """ Copy images matching the filename pattern
        Register other parameters.
        """
        filePaths = glob(expandPattern(pattern))
        
        #imgSet = SetOfMicrographs(filename=self.micsPairsSqlite, prefix=suffix)
        imgSet = self._createSetOfMicrographs(suffix=suffix)
        acquisition = imgSet.getAcquisition()
        # Setting Acquisition properties
        acquisition.setVoltage(voltage)
        acquisition.setSphericalAberration(sphericalAberration)
        acquisition.setAmplitudeContrast(amplitudeContrast)
        
        # Call a function that should be implemented by each subclass
        self._setOtherPars(imgSet)
        
        outFiles = [imgSet.getFileName()]
        imgh = ImageHandler()
        img = imgSet.ITEM_TYPE()
        n = 1
        size = len(filePaths)
        
        filePaths.sort()
        
        for i, fn in enumerate(filePaths):
#             ext = os.path.splitext(basename(f))[1]
            dst = self._getExtraPath(basename(fn))
            if self.copyToProj:
                copyFile(fn, dst)
            else:
                createLink(fn, dst)
            
            if n > 1:
                for index in range(1, n+1):
                    img.cleanObjId()
                    img.setFileName(dst)
                    img.setIndex(index)
                    imgSet.append(img)
            else:
                img.cleanObjId()
                img.setFileName(dst)
                # Fill the micName if img is a Micrograph.
                self._fillMicName(img, fn, pattern)
                imgSet.append(img)
            outFiles.append(dst)
            
            sys.stdout.write("\rImported %d/%d" % (i+1, size))
            sys.stdout.flush()
            
        print "\n"
        
        imgSet.write()
        
        
        return imgSet
Example #16
0
def copyOrLinkFileName(imgRow, prefixDir, outputDir, copyFiles=False):
    index, imgPath = relionToLocation(imgRow.getValue(md.RLN_IMAGE_NAME))
    baseName = os.path.basename(imgPath)
    newName = os.path.join(outputDir, baseName)
    if not os.path.exists(newName):
        if copyFiles:
            copyFile(os.path.join(prefixDir, imgPath), newName)
        else:
            createLink(os.path.join(prefixDir, imgPath), newName)

    imgRow.setValue(md.RLN_IMAGE_NAME, locationToRelion(index, newName))
Example #17
0
def copyOrLinkFileName(imgRow, prefixDir, outputDir, copyFiles=False):
    index, imgPath = relionToLocation(imgRow.getValue(md.RLN_IMAGE_NAME))
    baseName = os.path.basename(imgPath)
    newName = os.path.join(outputDir, baseName)
    if not os.path.exists(newName):
        if copyFiles:
            copyFile(os.path.join(prefixDir, imgPath), newName)
        else:
            createLink(os.path.join(prefixDir, imgPath), newName)
            
    imgRow.setValue(md.RLN_IMAGE_NAME, locationToRelion(index, newName))
Example #18
0
    def sitemapStep(self):
        prog = Plugin.getHome('sitemap')

        fnIn = self._getExtraPath(
            "atomStructIn") + self.inputStructure.get().getExtension()
        createLink(self.inputStructure.get().getFileName(), fnIn)
        fnIn = os.path.join('extra', os.path.split(fnIn)[1])

        args = '-WAIT -prot %s -j job -keeplogs -keepeval' % fnIn
        args += " -maxsites %d" % self.maxsites.get()

        self.runJob(prog, args, cwd=self._getPath())
Example #19
0
    def preparationStep(self):
        if isinstance(self.inputStructure.get(),AtomStruct):
            fnIn = self._getExtraPath("atomStructIn.pdb")
            aStruct1 = AtomicStructHandler(self.inputStructure.get().getFileName())
            aStruct1.write(fnIn)
            fnIn='extra/atomStructIn.pdb'
        else:
            fnIn = self._getExtraPath("atomStructIn.mae")
            createLink(self.inputStructure.get().getFileName(),fnIn)
            fnIn='extra/atomStructIn.mae'

        self.runJob(schrodinger_plugin.getHome('maestro'), "-b %s"%fnIn, cwd=self._getPath())
def copyFastaSequenceAndRead(protocol):
    outFileName = protocol._getExtraPath("sequence.fasta")
    if isinstance(protocol.inputSeq.get(), Sequence):
        fh = open(outFileName, "w")
        fh.write(">%s\n" % protocol.inputSeq.get().getSeqName())
        fh.write("%s\n" % protocol.inputSeq.get().getSequence())
        fh.close()
    elif isinstance(protocol.inputSeq.get(), SetOfDatabaseID):
        obj = protocol.inputSeq.get().getFirstItem()
        createLink(obj._uniprotFile.get(), outFileName)
    record = SeqIO.read(outFileName, "fasta")
    return str(record.seq)
    def dockStep(self, fnGridDir, fnSmall):
        fnReceptor = os.path.join(fnGridDir, "atomStruct.pdbqt")
        fnBase = os.path.splitext(os.path.split(fnSmall)[1])[0]
        fnSmallDir = self._getExtraPath(fnBase)
        makePath(fnSmallDir)
        fnDPF = os.path.join(fnSmallDir, fnBase + ".dpf")
        args = " -l %s -r %s -o %s" % (fnSmall, fnReceptor, fnDPF)

        args += " -p ga_pop_size=%d" % self.gaPop.get()
        args += " -p ga_num_evals=%d" % self.gaNumEvals.get()
        args += " -p ga_num_generations=%d" % self.gaNumGens.get()
        args += " -p ga_elitism=%d" % self.gaElitism.get()
        args += " -p ga_mutation_rate=%f" % self.gaMutationRate.get()
        args += " -p ga_crossover_rate=%f" % self.gaCrossOverRate.get()
        args += " -p ga_window_size=%d" % self.gaWindowSize.get()
        args += " -p sw_max_its=%d" % self.swMaxIts.get()
        args += " -p sw_max_succ=%d" % self.swMaxSucc.get()
        args += " -p sw_max_fail=%d" % self.swMaxFail.get()
        args += " -p sw_rho=%f" % self.swRho.get()
        args += " -p sw_lb_rho=%d" % self.swLbRho.get()
        args += " -p ls_search_freq=%f" % self.lsFreq.get()
        args += " -p ga_run=%d" % self.gaRun.get()
        args += " -p rmstol=%f" % self.rmsTol.get()

        self.runJob(
            bioinformatics_plugin.getMGLPath('bin/pythonsh'),
            bioinformatics_plugin.getADTPath('Utilities24/prepare_dpf42.py') +
            args)

        fnSmallLocal = os.path.split(fnSmall)[1]
        createLink(fnSmall, os.path.join(fnSmallDir, fnSmallLocal))
        createLink(fnReceptor, os.path.join(fnSmallDir, "atomStruct.pdbqt"))

        args = " -r atomStruct.pdbqt -l %s -o library.gpf" % fnSmallLocal
        self.runJob(
            bioinformatics_plugin.getMGLPath('bin/pythonsh'),
            bioinformatics_plugin.getADTPath('Utilities24/prepare_gpf4.py') +
            args,
            cwd=fnSmallDir)

        args = "-p library.gpf -l library.glg"
        self.runJob(bioinformatics_plugin.getAutodockPath("autogrid4"),
                    args,
                    cwd=fnSmallDir)

        args = "-p %s.dpf -l %s.dlg" % (fnBase, fnBase)
        self.runJob(bioinformatics_plugin.getAutodockPath("autodock4"),
                    args,
                    cwd=fnSmallDir)

        # Clean a bit
        cleanPattern(os.path.join(fnSmallDir, "atomStruct.*.map"))
 def continueStep(self, iterN):
     """Create a symbolic link of a previous iteration from a previous run."""
     iterN -= 1
     continueRun = self.continueRun.get()
     self._createWorkingDirs()
     # link particles
     prevStack = continueRun._getFileName('run_stack', run=0)
     currStack = self._getFileName('run_stack', run=0)
     createLink(continueRun._getExtraPath(prevStack),
                self._getExtraPath(currStack))
     # link params & cls
     for fn in ['iter_par', 'iter_cls']:
         prevParam = continueRun._getFileName(fn, iter=iterN)
         currParam = self._getFileName(fn, iter=iterN)
         createLink(continueRun._getExtraPath(prevParam),
                    self._getExtraPath(currParam))
Example #23
0
    def _insertAllSteps(self):

        self._params = {}
        # diameter must be passed in Armstrongs and therefore should be converted
        self._params['diam'] = self.diameter.get() * self.getInputMicrographs().getSamplingRate()
        # self._params['num-slices'] = self.numberSizes.get()
        # self._params['size-range'] = self.sizeRange.get()
        self._params['apix'] = self.inputMicrographs.get().getSamplingRate()
        self._params['thresh'] = self.threshold.get()
        # self._params['max-thresh'] = self.maxThreshold.get()
        # self._params['max-area'] = self.maxArea.get()
        # self._params['max-peaks'] = self.maxPeaks.get()

        args = ""
        for par, val in self._params.iteritems():
            args += " --%s=%s" % (par, str(val))

        if self.invert:
            args += " --invert"

        args += " " + self.extraParams.get('')

        deps = [] # Store all steps ids, final step createOutput depends on all of them

        ih = ImageHandler()

        for mic in self.inputMicrographs.get():
            # Create micrograph folder
            micName = mic.getFileName()
            micDir = self._getTmpPath(removeBaseExt(micName))
            makePath(micDir)

            # If needed convert micrograph to mrc format, otherwise link it
            if getExt(micName) != ".mrc":
                fnMicBase = replaceBaseExt(micName, 'mrc')
                inputMic = join(micDir, fnMicBase)
                ih.convert(mic.getLocation(), inputMic)
            else:
                inputMic = join(micDir, basename(micName))
                createLink(micName, inputMic)

            # Insert step to execute program
            stepId = self._insertFunctionStep('executeDogpickerStep', inputMic, args)
            deps.append(stepId)


        self._insertFinalSteps(deps)
Example #24
0
    def _insertAllSteps(self):

        self._params = {}
        # diameter must be passed in Angstrongs and therefore should be converted
        self._params['diam'] = self.diameter.get() * self.getInputMicrographs().getSamplingRate()
        # self._params['num-slices'] = self.numberSizes.get()
        # self._params['size-range'] = self.sizeRange.get()
        self._params['apix'] = self.inputMicrographs.get().getSamplingRate()
        self._params['thresh'] = self.threshold.get()
        # self._params['max-thresh'] = self.maxThreshold.get()
        # self._params['max-area'] = self.maxArea.get()
        # self._params['max-peaks'] = self.maxPeaks.get()

        args = ""
        for par, val in self._params.iteritems():
            args += " --%s=%s" % (par, str(val))

        if self.invert:
            args += " --invert"

        args += " " + self.extraParams.get('')

        deps = [] # Store all steps ids, final step createOutput depends on all of them

        ih = ImageHandler()

        for mic in self.inputMicrographs.get():
            # Create micrograph folder
            micName = mic.getFileName()
            micDir = self._getTmpPath(removeBaseExt(micName))
            makePath(micDir)

            # If needed convert micrograph to mrc format, otherwise link it
            if getExt(micName) != ".mrc":
                fnMicBase = replaceBaseExt(micName, 'mrc')
                inputMic = join(micDir, fnMicBase)
                ih.convert(mic.getLocation(), inputMic)
            else:
                inputMic = join(micDir, basename(micName))
                createLink(micName, inputMic)

            # Insert step to execute program
            stepId = self._insertFunctionStep('executeDogpickerStep', inputMic, args)
            deps.append(stepId)


        self._insertFinalSteps(deps)
Example #25
0
 def preparationStep(self):
     if isinstance(self.inputStructure.get(), AtomStruct):
         fnIn = self._getExtraPath("atomStructIn.pdb")
         aStruct1 = AtomicStructHandler(
             self.inputStructure.get().getFileName())
         aStruct1.write(fnIn)
         fnIn = 'extra/atomStructIn.pdb'
         self.runJob(schrodinger_plugin.getHome('maestro'),
                     "-b %s" % fnIn,
                     cwd=self._getPath())
     else:
         fnIn = self._getExtraPath(
             "atomStructIn") + self.inputStructure.get().getExtension()
         createLink(self.inputStructure.get().getFileName(), fnIn)
         fnIn = os.path.join('extra', os.path.split(fnIn)[1])
         self.runJob(schrodinger_plugin.getHome('maestro'),
                     "-m %s" % fnIn,
                     cwd=self._getPath())
Example #26
0
 def crysolWrapper(self):
     experimentalSAXS=""
     if self.experimentalSAXS.get()!="":
         experimentalSAXS=os.path.abspath(self.experimentalSAXS.get())
     inputStructure=os.path.abspath(self.inputStructure.get().getFileName())
     self._enterWorkingDir()
     if experimentalSAXS!="":
         createLink(experimentalSAXS,'experimental_SAXS_curve.dat')
         experimentalSAXS='experimental_SAXS_curve.dat'
     createLink(inputStructure,'pseudoatoms.pdb')
     self.runJob("crysol",
                 "pseudoatoms.pdb %s /lm %d /sm %f /ns %d %s"%(experimentalSAXS,self.numberOfHarmonics.get(),
                                                               self.maximumFrequency.get(),self.numberOfSamples.get(),
                                                               self.otherCrysol.get()))
     self.runJob("mv","*log *txt extra")
     if experimentalSAXS=="":
         self.runJob("mv","*alm extra")
     self._leaveWorkingDir()       
    def _processMovie(self, movieId, movieName, movieFolder):
        # if not mrc convert format to mrc
        # special case is mrc but ends in mrcs
        moviePath = os.path.join(movieFolder, movieName)
        movieNameMrc = pwutils.replaceExt(movieName, "mrc")
        moviePathMrc = pwutils.replaceExt(moviePath, "mrc")
        ih = ImageHandler()

        if movieName.endswith('.mrc'):
            pass  # Do nothing
        elif movieName.endswith('.mrcs'):
            # Create a link to the mrc or mrcs file but with .mrc extension
            createLink(moviePath, moviePathMrc)
        else:
            # Convert to mrc if the movie is in other format
            ih.convert(moviePath, moviePathMrc, DT_FLOAT)

        _, _, z, n = ih.getDimensions(moviePathMrc)
        numberOfFrames = max(z, n)  # Deal with mrc ambiguity

        # Write dummy auxiliary shift file.
        # TODO: this should be done properly when we define
        # how to transfer between movies
        shiftFnName = os.path.join(movieFolder, self._getShiftFnName(movieId))
        f = open(shiftFnName, 'w')
        shift = ("0 " * numberOfFrames + "\n") * 2
        f.write(shift)
        f.close()

        if self.alignFrameRange != -1:
            if self.alignFrameRange > numberOfFrames:
                raise Exception('Frame number (%d) is greater than '
                                'the total frames of the movie (%d)' %
                                (numberOfFrames, self.alignFrameRange))
            numberOfFrames = self.alignFrameRange.get()

        self._argsSummovie(movieNameMrc, movieFolder, movieId, numberOfFrames)

        try:
            self.runJob(self._program, self._args, cwd=movieFolder)
        except:
            print("ERROR: Movie %s failed\n" % movieName)

        logFile = self._getLogFile(movieId)
Example #28
0
    def _processMovie(self, movieId, movieName, movieFolder):
        # if not mrc convert format to mrc
        # special case is mrc but ends in mrcs
        moviePath = os.path.join(movieFolder, movieName)
        movieNameMrc = pwutils.replaceExt(movieName, "mrc")
        moviePathMrc = pwutils.replaceExt(moviePath, "mrc")
        ih = ImageHandler()

        if movieName.endswith('.mrc'):
            pass # Do nothing
        elif movieName.endswith('.mrcs'):
            # Create a link to the mrc or mrcs file but with .mrc extension
            createLink(moviePath, moviePathMrc)
        else:
            # Convert to mrc if the movie is in other format
            ih.convert(moviePath, moviePathMrc, DT_FLOAT)

        _, _, z, n = ih.getDimensions(moviePathMrc)
        numberOfFrames = max(z, n) # Deal with mrc ambiguity

        # Write dummy auxiliary shift file.
        # TODO: this should be done properly when we define
        # how to transfer between movies
        shiftFnName = os.path.join(movieFolder, self._getShiftFnName(movieId))
        f = open(shiftFnName,'w')
        shift = ("0 " * numberOfFrames + "\n" ) * 2
        f.write(shift)
        f.close()

        if self.alignFrameRange != -1:
            if self.alignFrameRange > numberOfFrames:
                raise Exception('Frame number (%d) is greater than '
                                'the total frames of the movie (%d)' %
                                (numberOfFrames, self.alignFrameRange))
            numberOfFrames = self.alignFrameRange.get()

        self._argsSummovie(movieNameMrc, movieFolder, movieId, numberOfFrames)

        try:
            self.runJob(self._program, self._args, cwd=movieFolder)
        except:
            print("ERROR: Movie %s failed\n"%movieName)

        logFile = self._getLogFile(movieId)
Example #29
0
 def crysolWrapper(self):
     experimentalSAXS = ""
     if self.experimentalSAXS.get() != "":
         experimentalSAXS = os.path.abspath(self.experimentalSAXS.get())
     inputStructure = os.path.abspath(
         self.inputStructure.get().getFileName())
     self._enterWorkingDir()
     if experimentalSAXS != "":
         createLink(experimentalSAXS, 'experimental_SAXS_curve.dat')
         experimentalSAXS = 'experimental_SAXS_curve.dat'
     createLink(inputStructure, 'pseudoatoms.pdb')
     self.runJob(
         CRYSOL, "pseudoatoms.pdb %s /lm %d /sm %f /ns %d %s" %
         (experimentalSAXS, self.numberOfHarmonics, self.maximumFrequency,
          self.numberOfSamples, self.otherCrysol))
     self.runJob("mv", "*log *txt extra")
     if experimentalSAXS == "":
         self.runJob("mv", "*alm extra")
     self._leaveWorkingDir()
Example #30
0
    def _processMovie(self, movieId, movieName, movieFolder):
        """call program here"""
        # if not mrc convert format to mrc
        # special case is mrc but ends in mrcs

        inMovieName = os.path.join(movieFolder, movieName)
        if movieName.endswith(".mrc"):
            movieNameAux = inMovieName
        elif movieName.endswith(".mrcs"):
            movieNameAux = pwutils.replaceExt(inMovieName, "mrc")
            createLink(inMovieName, movieNameAux)
            movieNameAux = pwutils.replaceExt(movieName, "mrc")
        else:
            micFnMrc = pwutils.replaceExt(inMovieName, "mrc")
            ImageHandler().convert(inMovieName, micFnMrc, DT_FLOAT)
            movieNameAux = pwutils.replaceExt(movieName, "mrc")

        # get number of frames
        if self.alignFrameRange == -1:
            numberOfFramesPerMovie = self.inputMovies.get().getDimensions()[3]
        else:
            numberOfFramesPerMovie = self.alignFrameRange.get()
        # write dummy auxiliary shift file.
        # TODO: this should be done properly when we define how to transfer shift
        # between movies
        shiftFnName = os.path.join(movieFolder, self._getShiftFnName(movieId))
        f = open(shiftFnName, "w")
        shift = ("0 " * numberOfFramesPerMovie + "\n") * 2
        f.write(shift)
        f.close()

        doApplyDoseFilter = self.doApplyDoseFilter.get()
        exposurePerFrame = self.exposurePerFrame.get()
        self._argsSummovie(
            movieNameAux, movieFolder, movieId, numberOfFramesPerMovie, doApplyDoseFilter, exposurePerFrame
        )
        try:

            self.runJob(self._program, self._args, cwd=movieFolder)
        except:
            print("ERROR: Movie %s failed\n" % movieName)

        logFile = self._getLogFile(movieId)
    def prepareGrid(self, fnSite, fnTarget):
        n = fnSite.split('@')[0]

        args = schrodinger_plugin.getPluginHome('utils/schrodingerUtils.py') + " centroid %s %s" % \
               (fnSite, self._getTmpPath("centroid.txt"))
        schrodinger_plugin.runSchrodinger(self, "python3", args)
        fh = open(self._getTmpPath("centroid.txt"))
        line = fh.readline()
        fh.close()
        x, y, z = line.split()

        fnGridDir = "grid-%s" % n
        makePath(self._getPath(fnGridDir))
        fnTargetLocal = self._getPath("%s/%s.maegz" % (fnGridDir, fnGridDir))
        createLink(fnTarget, fnTargetLocal)

        fnJob = self._getPath('%s/%s.inp' % (fnGridDir, fnGridDir))
        fh = open(fnJob, 'w')
        fh.write("GRIDFILE %s.zip\n" % fnGridDir)
        fh.write("OUTPUTDIR %s\n" % fnGridDir)
        fh.write("RECEP_FILE %s.maegz\n" % fnGridDir)
        fh.write("REC_MAECHARGES True\n")
        fh.write("HBOND_DONOR_AROMH %s\n" % self.HbondDonorAromH.get())
        if self.HbondDonorAromH.get():
            fh.write("HBOND_DONOR_AROMH_CHARGE %f\n" %
                     self.HbondDonorAromHCharge.get())
        fh.write("HBOND_ACCEP_HALO %s\n" % self.HbondAcceptHalo.get())
        fh.write("HBOND_DONOR_HALO %s\n" % self.HbondDonorHalo.get())
        fh.write("INNERBOX %d,%d,%d\n" %
                 (self.innerX.get(), self.innerY.get(), self.innerZ.get()))
        fh.write("ACTXRANGE %d\n" % self.outerX.get())
        fh.write("ACTYRANGE %d\n" % self.outerY.get())
        fh.write("ACTZRANGE %d\n" % self.outerZ.get())
        fh.write("OUTERBOX %d,%d,%d\n" %
                 (self.outerX.get(), self.outerY.get(), self.outerZ.get()))
        fh.write("GRID_CENTER %s,%s,%s\n" % (x, y, z))
        fh.close()

        args = "-WAIT -LOCAL -NJOBS %d %s.inp" % (self.numberOfThreads.get(),
                                                  fnGridDir)
        self.runJob(schrodinger_plugin.getHome('glide'),
                    args,
                    cwd=self._getPath(fnGridDir))
    def primeStep(self):
        prog=Plugin.getHome('prime')

        fnInputStructure = self.inputStructure.get().getFileName()
        fnIn=self._getPath("atomStructIn")+self.inputStructure.get().getExtension()

        createLink(fnInputStructure,fnIn)
        fnIn=os.path.split(fnIn)[1]

        fhJob = open(self._getPath('job.inp'),'w')
        fhJob.write("STRUCT_FILE %s\n" % fnIn)
        if self.operation.get()==0:
            # Side chain prediction
            fhJob.write("PRIME_TYPE  SIDE_PRED\n")
            fhJob.write("SELECT  pick\n")
            i=0
            for residue in self.residueList.get().split(','):
                fhJob.write("RESIDUE_%d %s\n"%(i,residue.strip()))
                i+=1
        elif self.operation.get()==1:
            # Minimization of all hydrogens
            fhJob.write("PRIME_TYPE  REAL_MIN\n")
            fhJob.write("SELECT  asl = (atom.ele H)\n")
        elif self.operation.get()==2:
            # Loop prediction
            fhJob.write("PRIME_TYPE  LOOP_BLD\n")
            fhJob.write("LOOP_0_RES_0 %s\n"%self.residueFirst.get())
            fhJob.write("LOOP_0_RES_1 %s\n"%self.residueLast.get())
            fhJob.write("RES_SPHERE %f\n"%self.resSphere.get())
            fhJob.write("MIN_OVERLAP %f\n"%self.minOverlap.get())

        fhJob.write("USE_CRYSTAL_SYMMETRY no\n")
        fhJob.write("USE_RANDOM_SEED no\n")
        fhJob.write("SEED 0\n")
        fhJob.write("EXT_DIEL 80.00\n")
        fhJob.write("USE_MEMBRANE no\n")
        fhJob.close()
        args='-WAIT -LOCAL job.inp'
        self.runJob(prog,args,cwd=self._getPath())
Example #33
0
    def _preprocessMicrographRow(self, img, imgRow):
        if self._imgPath:
            # Create a link or copy files to extraPath
            # and update the Row properly
            micFile = imgRow.getValue(md.MDL_MICROGRAPH)
            micBase = basename(micFile)
            micDst = self.protocol._getExtraPath(micBase)
            self.copyOrLink(join(self._imgPath, micFile), micDst)
            
            imgRow.setValue(md.MDL_MICROGRAPH, micDst)
            self._fillMicName(img, micBase)

        if self._ctfPath:
            # Read Xmipp ctfModel parameters and add
            # to the original micrograph row
            ctfFile = imgRow.getValue(md.MDL_CTF_MODEL)
            ctfPath = join(self._imgPath, ctfFile)
            ctfRow = md.Row()
            ctfRow.readFromFile(ctfPath)
            imgRow.copyFromRow(ctfRow)
            # Also copy or link to the result micrograph
            # folder output by Xmipp containing the PSD and other images
            ctfSrcDir = dirname(ctfPath)
            ctfBaseDir = basename(ctfSrcDir)
            ctfDstDir = self.protocol._getExtraPath(ctfBaseDir)

            if self.copyOrLink == createLink:
                createLink(ctfSrcDir, ctfDstDir)
            else: # use copyTree instead of copyFile
                copyTree(ctfSrcDir, ctfDstDir)
            # Fix the path to psd files
            for label in CTF_PSD_DICT.values():
                filePath = imgRow.getValue(label)
                # Take the last part of the path including
                # the filename and the folder up to that
                fileName = basename(filePath)
                newFilePath = join(ctfDstDir, fileName)
                imgRow.setValue(label, newFilePath)
Example #34
0
    def _preprocessMicrographRow(self, img, imgRow):
        if self._imgPath:
            # Create a link or copy files to extraPath
            # and update the Row properly
            micFile = imgRow.getValue(md.MDL_MICROGRAPH)
            micBase = basename(micFile)
            micDst = self.protocol._getExtraPath(micBase)
            self.copyOrLink(join(self._imgPath, micFile), micDst)

            imgRow.setValue(md.MDL_MICROGRAPH, micDst)
            self._fillMicName(img, micBase)

        if self._ctfPath:
            # Read Xmipp ctfModel parameters and add
            # to the original micrograph row
            ctfFile = imgRow.getValue(md.MDL_CTF_MODEL)
            ctfPath = join(self._imgPath, ctfFile)
            ctfRow = md.Row()
            ctfRow.readFromFile(ctfPath)
            imgRow.copyFromRow(ctfRow)
            # Also copy or link to the result micrograph
            # folder output by Xmipp containing the PSD and other images
            ctfSrcDir = dirname(ctfPath)
            ctfBaseDir = basename(ctfSrcDir)
            ctfDstDir = self.protocol._getExtraPath(ctfBaseDir)

            if self.copyOrLink == createLink:
                createLink(ctfSrcDir, ctfDstDir)
            else:  # use copyTree instead of copyFile
                copyTree(ctfSrcDir, ctfDstDir)
            # Fix the path to psd files
            for label in CTF_PSD_DICT.values():
                filePath = imgRow.getValue(label)
                # Take the last part of the path including
                # the filename and the folder up to that
                fileName = basename(filePath)
                newFilePath = join(ctfDstDir, fileName)
                imgRow.setValue(label, newFilePath)
Example #35
0
    def _processMovie(self, movieId, movieName, movieFolder):
        # if not mrc convert format to mrc
        # special case is mrc but ends in mrcs
        moviePath = os.path.join(movieFolder, movieName)
        movieNameMrc = pwutils.replaceExt(movieName, "mrc")
        moviePathMrc = pwutils.replaceExt(moviePath, "mrc")
        ih = ImageHandler()

        if movieName.endswith('.mrc'):
            pass  # Do nothing
        elif movieName.endswith('.mrcs'):
            # Create a link to the mrc or mrcs file but with .mrc extension
            createLink(moviePath, moviePathMrc)
        else:
            # Convert to mrc if the movie is in other format
            ih.convert(moviePath, moviePathMrc, DT_FLOAT)

        _, _, z, n = ih.getDimensions(moviePathMrc)
        numberOfFrames = max(z, n)  # Deal with mrc ambiguity

        if self.alignFrameRange != -1:
            if self.alignFrameRange > numberOfFrames:
                raise Exception('Frame number (%d) is greater than '
                                'the total frames of the movie (%d)' %
                                (numberOfFrames, self.alignFrameRange))

            numberOfFrames = self.alignFrameRange.get()

        self._argsUnblur(movieNameMrc, movieFolder, movieId, numberOfFrames)
        try:

            self.runJob(self._program, self._args, cwd=movieFolder)
        except:
            print("ERROR: Movie %s failed\n" % movieName)

        logFile = self._getLogFile(movieId)
Example #36
0
    def _processMovie(self, movieId, movieName, movieFolder):
        # if not mrc convert format to mrc
        # special case is mrc but ends in mrcs
        moviePath = os.path.join(movieFolder, movieName)
        movieNameMrc = pwutils.replaceExt(movieName, "mrc")
        moviePathMrc = pwutils.replaceExt(moviePath, "mrc")
        ih = ImageHandler()

        if movieName.endswith('.mrc'):
            pass # Do nothing
        elif movieName.endswith('.mrcs'):
            # Create a link to the mrc or mrcs file but with .mrc extension
            createLink(moviePath, moviePathMrc)
        else:
            # Convert to mrc if the movie is in other format
            ih.convert(moviePath, moviePathMrc, DT_FLOAT)

        _, _, z, n = ih.getDimensions(moviePathMrc)
        numberOfFrames = max(z, n) # Deal with mrc ambiguity

        if self.alignFrameRange != -1:
            if self.alignFrameRange > numberOfFrames:
                raise Exception('Frame number (%d) is greater than '
                                'the total frames of the movie (%d)' %
                                (numberOfFrames, self.alignFrameRange))

            numberOfFrames = self.alignFrameRange.get()

        self._argsUnblur(movieNameMrc, movieFolder, movieId, numberOfFrames)
        try:

            self.runJob(self._program, self._args, cwd=movieFolder)
        except:
            print("ERROR: Movie %s failed\n" % movieName)

        logFile = self._getLogFile(movieId)
Example #37
0
    def createLinkSteps(self):
        continueRun = self.continueRun.get()
        prevPartDir = continueRun._getExtraPath("particles")
        currPartDir = self._getExtraPath("particles")
        runN = self._getRun() - 1 if not Plugin.isVersion('2.91') else self._getRun()
        prevRefDir = continueRun._getExtraPath("refine_%02d" % runN)
        currRefDir = self._getExtraPath("refine_%02d" % runN)
        prevSetsDir = continueRun._getExtraPath("sets")
        currSetsDir = self._getExtraPath("sets")

        createLink(prevPartDir, currPartDir)
        createLink(prevRefDir, currRefDir)
        createLink(prevSetsDir, currSetsDir)
    def createLinkSteps(self):
        continueRun = self.continueRun.get()
        prevPartDir = continueRun._getExtraPath("particles")
        currPartDir = self._getExtraPath("particles")
        runN = self._getRun()
        prevRefDir = continueRun._getExtraPath("r2d_%02d" % (runN - 1))
        currRefDir = self._getExtraPath("r2d_%02d" % (runN - 1))
        prevSetsDir = continueRun._getExtraPath("sets")
        currSetsDir = self._getExtraPath("sets")

        createLink(prevPartDir, currPartDir)
        createLink(prevRefDir, currRefDir)
        createLink(prevSetsDir, currSetsDir)
Example #39
0
    def createLinkSteps(self):
        continueRun = self.continueRun.get()
        prevPartDir = continueRun._getExtraPath("particles")
        currPartDir = self._getExtraPath("particles")
        runN = self._getRun() - 1
        prevRefDir = continueRun._getExtraPath("refine_%02d" % runN)
        currRefDir = self._getExtraPath("refine_%02d" % runN)
        prevSetsDir = continueRun._getExtraPath("sets")
        currSetsDir = self._getExtraPath("sets")

#         createLink(prevInfoDir, currInfoDir)
        createLink(prevPartDir, currPartDir)
        createLink(prevRefDir, currRefDir)
        createLink(prevSetsDir, currSetsDir)
    def createLinkSteps(self):
        continueRun = self.continueRun.get()
        prevPartDir = continueRun._getExtraPath("particles")
        currPartDir = self._getExtraPath("particles")
        runN = self._getRun() - 1
        prevRefDir = continueRun._getExtraPath("refine_%02d" % runN)
        currRefDir = self._getExtraPath("refine_%02d" % runN)
        prevSetsDir = continueRun._getExtraPath("sets")
        currSetsDir = self._getExtraPath("sets")

        #         createLink(prevInfoDir, currInfoDir)
        createLink(prevPartDir, currPartDir)
        createLink(prevRefDir, currRefDir)
        createLink(prevSetsDir, currSetsDir)
Example #41
0
    def evaluateDeformationsStep(self):
        N = self.inputStructures.get().getSize()
        import numpy
        distances = numpy.zeros([N, N])
        for volCounter in range(1, N + 1):
            pdb1 = open(
                self._getPath('pseudoatoms_%02d.pdb' % volCounter)).readlines()
            for volCounter2 in range(1, N + 1):
                if volCounter != volCounter2:
                    davg = 0.
                    Navg = 0.
                    pdb2 = open(self._getExtraPath('alignment_%02d_%02d.pdb' % (
                    volCounter, volCounter2))).readlines()
                    for i in range(len(pdb1)):
                        line1 = pdb1[i]
                        if line1.startswith("ATOM"):
                            line2 = pdb2[i]
                            x1 = float(line1[30:37])
                            y1 = float(line1[38:45])
                            z1 = float(line1[46:53])
                            x2 = float(line2[30:37])
                            y2 = float(line2[38:45])
                            z2 = float(line2[46:53])
                            dx = x1 - x2
                            dy = y1 - y2
                            dz = z1 - z2
                            d = math.sqrt(dx * dx + dy * dy + dz * dz)
                            davg += d
                            Navg += 1
                    if Navg > 0:
                        davg /= Navg
                    distances[volCounter - 1, volCounter2 - 1] = davg
        distances = 0.5 * (distances + numpy.transpose(distances))
        numpy.savetxt(self._getPath('distances.txt'), distances)
        distances1D = numpy.mean(distances, axis=0)
        print("Average distance to rest of volumes=", distances1D)
        imin = numpy.argmin(distances1D)
        print("The volume in the middle is pseudoatoms_%02d.pdb" % (imin + 1))
        createLink(self._getPath("pseudoatoms_%02d.pdb" % (imin + 1)),
                   self._getPath("pseudoatoms.pdb"))
        createLink(self._getPath("modes_%02d.xmd" % (imin + 1)),
                   self._getPath("modes.xmd"))
        createLink(
            self._getExtraPath("pseudoatoms_%02d_distance.hist" % (imin + 1)),
            self._getExtraPath("pseudoatoms_distance.hist"))

        # Measure range
        minDisplacement = 1e38 * numpy.ones([self.numberOfModes.get(), 1])
        maxDisplacement = -1e38 * numpy.ones([self.numberOfModes.get(), 1])
        mdNMA = MetaData(self._getPath("modes.xmd"))
        for volCounter in range(1, N + 1):
            if volCounter != imin + 1:
                md = MetaData(self._getExtraPath(
                    "alignment_%02d_%02d.xmd" % (imin + 1, volCounter)))
                displacements = md.getValue(MDL_NMA, md.firstObject())
                idx1 = 0
                idx2 = 0
                for idRow in mdNMA:
                    if mdNMA.getValue(MDL_ENABLED, idRow) == 1:
                        minDisplacement[idx2] = min(minDisplacement[idx2],
                                                    displacements[idx1])
                        maxDisplacement[idx2] = max(maxDisplacement[idx2],
                                                    displacements[idx1])
                        idx1 += 1
                    else:
                        minDisplacement[idx2] = 0
                        maxDisplacement[idx2] = 0
                    idx2 += 1
        idx2 = 0
        for idRow in mdNMA:
            mdNMA.setValue(MDL_NMA_MINRANGE, float(minDisplacement[idx2]),
                           idRow)
            mdNMA.setValue(MDL_NMA_MAXRANGE, float(maxDisplacement[idx2]),
                           idRow)
            idx2 += 1
        mdNMA.write(self._getPath("modes.xmd"))

        # Create output
        volCounter = 0
        for inputStructure in self.inputStructures.get():
            if volCounter == imin:
                print("The corresponding volume is %s" % (
                    getImageLocation(inputStructure)))
                finalStructure = inputStructure
                break
            volCounter += 1

        pdb = AtomStruct(self._getPath('pseudoatoms.pdb'), pseudoatoms=True)
        self._defineOutputs(outputPdb=pdb)
        modes = NormalModes(filename=self._getPath('modes.xmd'))
        self._defineOutputs(outputModes=modes)

        self._defineSourceRelation(self.inputStructures, self.outputPdb)
Example #42
0
 def _createLink(self, movie):
     movieFn = movie.getFileName()
     if movieFn.endswith("mrcs"):
         pwutils.createLink(movieFn, self._getMovieFn(movie))
    def dockingStep(self):
        def makeLocal(fn):
            return fn.replace(self._getPath()+'/','')

        glideProg = schrodinger_plugin.getHome('glide')
        structConvertProg = schrodinger_plugin.getHome('utilities/structconvert')
        structCatProg = schrodinger_plugin.getHome('utilities/structcat')
        propListerProg = schrodinger_plugin.getHome('utilities/proplister')

        fnGrid = self._getExtraPath("grid.zip")
        if not os.path.exists(fnGrid): # Prepared to resume
            createLink(self.inputGrid.get().getFileName(),fnGrid)

        fnLigands = self._getPath('ligands')
        if not os.path.exists(fnLigands):
            makePath(fnLigands)

        fnIn = self._getPath('job.inp')
        if not os.path.exists(fnIn): # Prepared to resume
            fhIn = open(fnIn,'w')
            fhIn.write("GRIDFILE %s\n"%makeLocal(fnGrid))

            if self.dockingMethod.get()==0:
                fhIn.write("DOCKING_METHOD confgen\n")
                fhIn.write("FLEXTORS True\n")
            elif self.dockingMethod.get()==1:
                fhIn.write("DOCKING_METHOD rigid\n")
            elif self.dockingMethod.get()==2:
                fhIn.write("DOCKING_METHOD mininplace\n")
            elif self.dockingMethod.get()==3:
                fhIn.write("DOCKING_METHOD inplace\n")

            if self.dockingPrecision.get()==0:
                fhIn.write("PRECISION HTVS\n")
            elif self.dockingPrecision.get()==1:
                fhIn.write("PRECISION SP\n")
            elif self.dockingPrecision.get()==2:
                fhIn.write("PRECISION XP\n")
                fhIn.write("WRITE_XP_DESC True\n")
                fhIn.write("POSTDOCK_NPOSE 10\n")

            fhIn.write("SAMPLE_N_INVERSIONS %s\n"%self.sampleNinversions.get())
            fhIn.write("SAMPLE_RINGS %s\n"%self.sampleRings.get())
            fhIn.write("EPIK_PENALTIES %s\n"%self.sampleNinversions.get())
            fhIn.write("SKIP_EPIK_METAL_ONLY %s\n"%self.skipMetalEpik.get())
            fhIn.write("EXPANDED_SAMPLING %s\n"%self.expandedSampling.get())
            fhIn.write("REWARD_INTRA_HBONDS %s\n"%self.rewardIntraHBonds.get())
            fhIn.write("HBOND_DONOR_AROMH %s\n"%self.HbondDonorAromH.get())
            if self.HbondDonorAromH.get():
                fhIn.write("HBOND_DONOR_AROMH_CHARGE %f\n" % self.HbondDonorAromHCharge.get())
            fhIn.write("HBOND_ACCEP_HALO %s\n"%self.HbondAcceptHalo.get())
            fhIn.write("HBOND_DONOR_HALO %s\n"%self.HbondDonorHalo.get())

            fhIn.write("MAXKEEP %d\n"%self.maxkeep.get())
            fhIn.write("SCORING_CUTOFF %f\n"%self.scoreCutoff.get())
            if self.maxref.get()>0:
                fhIn.write("MAXREF %d\n" % self.maxref.get())
            else:
                if self.dockingPrecision.get()==2:
                    fhIn.write("MAXREF %d\n" % 800)
                else:
                    fhIn.write("MAXREF %d\n" % 400)
            fhIn.write("POSES_PER_LIG %d\n"%self.posesPerLig.get())

            fh=open(self._getTmpPath("allLigands.mol2"),'w')
            for small in self.inputLibrary.get():
                fnSmall = small.getFileName()
                fnBase = os.path.splitext(os.path.split(fnSmall)[1])[0]
                if not fnSmall.endswith('.mol2'):
                    args = inputArg(fnSmall)
                    fnSmall = self._getTmpPath('ligand.mol2')
                    args += " -omol2 %s"%fnSmall
                    self.runJob(structConvertProg, args)
                    putMol2Title(fnSmall,fnBase)
                fhLigand = open(fnSmall)
                for line in fhLigand:
                    fh.write(line)
                fhLigand.close()
            fh.close()
            fhIn.write("LIGANDFILE tmp/allLigands.mol2\n")

            fhIn.close()

        args = "-WAIT -NJOBS %d -RESTART -LOCAL job.inp"%(self.numberOfThreads.get())
        self.runJob(glideProg, args, cwd=self._getPath())

        self.runJob(propListerProg,
                    '-p "title" -p "docking score" -p "glide ligand efficiency" -p "glide ligand efficiency sa" -p "glide ligand efficiency ln" -c -o %s %s'%\
                    (self._getPath("job_pv.csv"), self._getPath("job_pv.maegz")))
Example #44
0
 def _createLink(self, movie):
     movieFn = movie.getFileName()
     if movieFn.endswith("mrcs"):
         pwutils.createLink(movieFn, self._getMovieFn(movie))
Example #45
0
    def evaluateDeformationsStep(self):
        N = self.inputStructures.get().getSize()
        import numpy
        distances=numpy.zeros([N,N])
        for volCounter in range(1,N+1):
            pdb1=open(self._getPath('pseudoatoms_%02d.pdb'%volCounter)).readlines()
            for volCounter2 in range(1,N+1):
                if volCounter!=volCounter2:
                    davg=0.
                    Navg=0.
                    pdb2=open(self._getExtraPath('alignment_%02d_%02d.pdb'%(volCounter,volCounter2))).readlines()
                    for i in range(len(pdb1)):
                        line1=pdb1[i]
                        if line1.startswith("ATOM"):
                            line2=pdb2[i]
                            x1=float(line1[30:37])
                            y1=float(line1[38:45])
                            z1=float(line1[46:53])
                            x2=float(line2[30:37])
                            y2=float(line2[38:45])
                            z2=float(line2[46:53])
                            dx=x1-x2
                            dy=y1-y2
                            dz=z1-z2
                            d=math.sqrt(dx*dx+dy*dy+dz*dz)
                            davg+=d
                            Navg+=1
                    if Navg>0:
                        davg/=Navg
                    distances[volCounter-1,volCounter2-1]=davg
        distances=0.5*(distances+numpy.transpose(distances))
        numpy.savetxt(self._getPath('distances.txt'),distances)
        distances1D=numpy.mean(distances,axis=0)
        print("Average distance to rest of volumes=",distances1D)
        imin=numpy.argmin(distances1D)
        print("The volume in the middle is pseudoatoms_%02d.pdb"%(imin+1))
        createLink(self._getPath("pseudoatoms_%02d.pdb"%(imin+1)),self._getPath("pseudoatoms.pdb"))
        createLink(self._getPath("modes_%02d.xmd"%(imin+1)),self._getPath("modes.xmd"))
        createLink(self._getExtraPath("pseudoatoms_%02d_distance.hist"%(imin+1)),self._getExtraPath("pseudoatoms_distance.hist"))

        # Measure range
        minDisplacement= 1e38*numpy.ones([self.numberOfModes.get(),1])
        maxDisplacement=-1e38*numpy.ones([self.numberOfModes.get(),1])
        mdNMA=MetaData(self._getPath("modes.xmd"))
        for volCounter in range(1,N+1):
            if volCounter!=imin+1:
                md=MetaData(self._getExtraPath("alignment_%02d_%02d.xmd"%(imin+1,volCounter)))
                displacements=md.getValue(MDL_NMA, md.firstObject())
                idx1=0
                idx2=0
                for idRow in mdNMA:
                    if mdNMA.getValue(MDL_ENABLED,idRow)==1:
                        minDisplacement[idx2]=min(minDisplacement[idx2],displacements[idx1])
                        maxDisplacement[idx2]=max(maxDisplacement[idx2],displacements[idx1])
                        idx1+=1
                    else:
                        minDisplacement[idx2]=0
                        maxDisplacement[idx2]=0
                    idx2+=1
        idx2=0
        for idRow in mdNMA:
            mdNMA.setValue(MDL_NMA_MINRANGE,float(minDisplacement[idx2]),idRow)
            mdNMA.setValue(MDL_NMA_MAXRANGE,float(maxDisplacement[idx2]),idRow)
            idx2+=1
        mdNMA.write(self._getPath("modes.xmd"))

        # Create output
        volCounter=0
        for inputStructure in self.inputStructures.get():
            if volCounter==imin:
                print("The corresponding volume is %s"%(getImageLocation(inputStructure)))
                finalStructure=inputStructure
                break
            volCounter+=1

        pdb = PdbFile(self._getPath('pseudoatoms.pdb'), pseudoatoms=True)
        self._defineOutputs(outputPdb=pdb)
        modes = NormalModes(filename=self._getPath('modes.xmd'))
        self._defineOutputs(outputModes=modes)
        self._defineSourceRelation(finalStructure, self.outputPdb)
        self._defineSourceRelation(self.outputPdb, self.outputModes)
Example #46
0
 def convertToPseudoAtomsStep(self, inputStructure, fnIn, fnMask, prefix):
     XmippProtConvertToPseudoAtomsBase.convertToPseudoAtomsStep(self, fnIn, fnMask, prefix)
     self.createChimeraScriptStep(inputStructure, fnIn, prefix)
     createLink(self._getPath("pseudoatoms%s.pdb"%prefix),self._getPath("pseudoatoms.pdb"))
Example #47
0
    def preparationStep(self):
        prog = Plugin.getHome('utilities/prepwizard')

        if isinstance(self.inputStructure.get(), AtomStruct):
            fnIn = self._getExtraPath("atomStructIn.pdb")
            aStruct1 = AtomicStructHandler(
                self.inputStructure.get().getFileName())
            aStruct1.write(fnIn)
            fnIn = 'extra/atomStructIn.pdb'
        else:
            fnIn = self._getExtraPath("atomStructIn.mae")
            createLink(self.inputStructure.get().getFileName(), fnIn)
            fnIn = 'extra/atomStructIn.mae'

        args = '-WAIT'
        if self.stage1.get():
            if self.fillSideChains.get():
                args += ' -fillsidechains'
            if self.fillLoops.get():
                args += ' -fillloops'
            if self.disulfides.get():
                args += ' -disulfides'
            if self.mse.get():
                args += ' -mse'
            if self.hydrogens.get() == 0:
                args += " -nohtreat"
            elif self.hydrogens.get() == 1:
                args += " -rehtreat"
            if self.glycosylation.get():
                args += " -glycosylation"
            if self.palmitoylation.get():
                args += " -palmitoylation"
            if self.captermini.get():
                args += " -captermini"
            if self.keepFarWat.get():
                args += " -keepfarwat -watdist %f" % self.watdist.get()
            if not self.treatMetals.get():
                args += " -nometaltreat"

        if self.stage2.get():
            if self.sampleWaters.get():
                args += " -samplewater"
            if self.xtal.get():
                args += " -xtal"
            if self.propKa.get():
                args += " -propka_pH %f" % self.propKapH.get()
            else:
                args += " -nopropka"
            if self.minadjh.get():
                args += " -minimize_adj_h"
        else:
            args += " -noprotassign"

        if self.stage3.get():
            args += " -rmsd %f" % self.rmsdD.get()
            if self.fix.get():
                args += " -fix"
            if self.force.get() == 0:
                args += " -f 2005"
            else:
                args += " -f 3"
        else:
            args += " -noimpref"

        if self.stage4.get():
            if self.ms.get():
                args += " -ms %d" % self.msN.get()
            args += " -epik_pH %f" % self.epikPh.get()
            args += " -epik_pHt %f" % self.epikPht.get()
        else:
            args += " -noepik"

        args += ' %s atomStructOut.maegz' % fnIn
        self.runJob(prog, args, cwd=self._getPath())