FetchLocal: Difference between revisions

From PyMOLWiki
Jump to navigation Jump to search
(create a new page FetchLocal for script fetchlocal)
 
(add async to cmd.fetch. It was in the API of fetchlocal but not passed to fetch.)
 
(2 intermediate revisions by the same user not shown)
Line 56: Line 56:
             if localfn is not None:
             if localfn is not None:
                 print 'Load local file instead of fetching from internet: ', localfn  
                 print 'Load local file instead of fetching from internet: ', localfn  
                 cmd.load(filename=localfn, object='', format='pdb', state=state,  
                 cmd.load(filename=localfn, object=name, format='pdb', state=state,  
                         finish=finish, discrete=discrete, multiplex=multiplex,  
                         finish=finish, discrete=discrete, multiplex=multiplex,  
                         zoom=zoom, quiet=quiet)
                         zoom=zoom, quiet=quiet)
             else:  # otherwise hand it over to pymol fetch function
             else:  # otherwise hand it over to pymol fetch function
                 cmd.fetch(c,name,state,finish,discrete,multiplex,zoom,type,path,file,quiet)
                 cmd.fetch(c,name,state,finish,discrete,multiplex,zoom,type,async,path,file,quiet)
     else:
     else:
         cmd.fetch(code,name,state,finish,discrete,multiplex,zoom,type,path,file,quiet)
         cmd.fetch(code,name,state,finish,discrete,multiplex,zoom,type,async,path,file,quiet)




Line 71: Line 71:


= See Also =
= See Also =
[[Fetch]], [[Fetch_Path]], [[Fetch_Host]]
[[Fetch]], [[Fetch_Path]], [[Fetch_Host]], [[Psico]]


[[Category:Script_Library]]
[[Category:Script_Library]]
[[Category:System_Scripts]]
[[Category:System_Scripts]]

Latest revision as of 02:27, 6 October 2016

Overview

Try fetching local copy of PDB files before going on internet to fetch a remote copy.

Sometimes you have a local copy of the PDB structure files, or biological unit files. They are, however, usually organized into sub-directories (for a good reason). Setting Fetch_Path to the top directory will not make PyMOL to use local files before go on internet to fetch a remote copy. This script extends the functionality of the PyMOL command Fetch by searching local sub-directories for target files first.

The search order of the script: 1. local copy of PDB; 2. Fetch_Path; 3. remote repository (Fetch_Host).

Note

The script only copes with .pdb and .pdb1 (or .pdb2, .pdb3, ...) file types.

Syntax

See Fetch

The Code

""" 2012_09_18, Hongbo Zhu <hongbo.zhu.cn gmail>
    DESCRIPTION: Look for pdb* on local disk before fetching remotely.
"""
import os
import cmd

#####################
# user configuration
localpdbdir = '/your/dir/to/PDB/divided'
localbudir  = '/your/dir/to/PDB_BU/divided' # set to '' (empty string) if N/A

def fetchlocal(code, name='', state=0, finish=1, discrete=-1,
               multiplex=-2, zoom=-1, type='pdb', async=-1, path=None,
               file=None, quiet=1):  
    """ Default parameters are the same as in function definition for fetch() 
        in file ./modules/pymol/importing.py
    """
    if type.startswith('pdb'): # pdb files, or biological unit files .pdb1 .pdb2 etc.
        if type == 'pdb': # pdb files
            localdir = localpdbdir
        else:
            localdir = localbudir
        for c in string.split(str(code)):
            subdir = c.lower()[1:3]
            if type == 'pdb': 
                if os.path.isfile('%s/%s/pdb%s.ent.gz' % (localdir,subdir,c.lower())):
                    localfn = '%s/%s/pdb%s.ent.gz' % (localdir,subdir,c.lower())
                elif os.path.isfile('%s/%s/pdb%s.ent' % (localdir,subdir,c.lower())):
                    localfn = '%s/%s/pdb%s.ent.gz' % (localdir,subdir,c.lower())
                else:
                    localfn = None
            else:             
                if os.path.isfile('%s/%s/%s.%s.gz' % (localdir,subdir,c.lower(),type)):
                    localfn =  '%s/%s/%s.%s.gz' % (localdir,subdir,c.lower(),type)
                elif os.path.isfile('%s/%s/%s.%s' % (localdir,subdir,c.lower(),type)):
                    localfn = '%s/%s/%s.%s' % (localdir,subdir,c.lower(),type)
                else:
                    localfn = None

            if localfn is not None:
                print 'Load local file instead of fetching from internet: ', localfn 
                cmd.load(filename=localfn, object=name, format='pdb', state=state, 
                         finish=finish, discrete=discrete, multiplex=multiplex, 
                         zoom=zoom, quiet=quiet)
            else:  # otherwise hand it over to pymol fetch function
                cmd.fetch(c,name,state,finish,discrete,multiplex,zoom,type,async,path,file,quiet)
    else:
        cmd.fetch(code,name,state,finish,discrete,multiplex,zoom,type,async,path,file,quiet)


cmd.extend('fetchlocal', fetchlocal)

See Also

Fetch, Fetch_Path, Fetch_Host, Psico