File: repository.py

package info (click to toggle)
openstructure 2.11.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 206,240 kB
  • sloc: cpp: 188,571; python: 36,686; ansic: 34,298; fortran: 3,275; sh: 312; xml: 146; makefile: 29
file content (51 lines) | stat: -rw-r--r-- 1,830 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import os.path
import string
import os

from ost import io

class ModelRepository:
  """
  Model repository. A model repository abstracts the way that PDB files are 
  loaded. Instead of explicitly specifying the PDB filename, only the PDB 
  id (and optionally a chain) needs to be specified. The actual files are then 
  resolved by the repository.
  
  Usage
  -----
  The usage pattern of the model repository is simple. After construction, 
  models may be loaded by passing in a model id and optionally a number of 
  chain names (see documentation for io.LoadPDB).
  
  Example:
  import string
  repos=repository.ModelRepository('path_to_pdbs', 
                                   file_pattern='pdb%(id)s.ent.gz', 
                                   transform=string.lower)
  # load 1ake (note that the name is transformed by string.lower)
  m=repos.Load('1AKE')
  """
  def __init__(self, directory=None, 
               file_pattern='%(id)s.pdb',transform=str):
    """
    Construct new model repository
    """
    if directory==None:
      self.directory_=os.getenv('PDB_PATH', '')
    else:
      self.directory_=directory;
    self.file_pattern_=file_pattern
    self.transform_=transform or string.__init__
  def FilenameForModel(self, pdb_id, chain):
    pdb_id=self.transform_(pdb_id)
    basename=self.file_pattern_ % {'id' : pdb_id, 'chain' :chain, 'dir' : pdb_id[1:3]}
    return os.path.join(self.directory_, basename)
    
  def Load(self, pdb_id, chains='', calpha_only=False, fault_tolerant=False):
    return io.LoadPDB(self.FilenameForModel(pdb_id, chains),
                      chains, calpha_only=calpha_only, 
                      fault_tolerant=fault_tolerant)
                      
  def LoadMulti(self, pdb_id, chains=""):
    return io.LoadMultiPDB(self.FilenameForModel(pdb_id, chains))