Package mmLib :: Module mmCIFDB
[hide private]
[frames] | no frames]

Source Code for Module mmLib.mmCIFDB

  1  ## Copyright 2002-2010 by PyMMLib Development Group (see AUTHORS file) 
  2  ## This code is part of the PyMMLib distribution and governed by 
  3  ## its license.  Please see the LICENSE file that should have been 
  4  ## included as part of this package. 
  5  """Structural database based on mmCIF. 
  6  """ 
  7  ## Python 
  8  from __future__ import generators 
  9  import copy 
 10   
 11  ## pymmlib 
 12  import mmCIF 
 13   
 14   
15 -class mmCIFDB(mmCIF.mmCIFData):
16 """Database class for the storage and access of structural data. This 17 database is organized according to mmCIF data tags. Methods to lookup 18 common structure items are included. 19 """
20 - def __str__(self):
21 col_len = 12 22 dump = "" 23 24 for table in self: 25 table.autoset_columns() 26 dump += "Table: %s\n" % (table.name) 27 for col_name in table.columns: 28 dump += col_name[:col_len-1].ljust(col_len) 29 dump += "\n" 30 dump += "-"*col_len*len(table.columns) + "\n" 31 for row in table: 32 for col_name in table.columns: 33 try: 34 dump += str(row[col_name])[:col_len-1].ljust(col_len) 35 except KeyError: 36 dump += " "*col_len 37 dump += "\n" 38 dump += "\n" 39 40 return dump
41
42 - def add_table(self, table):
43 self.append(copy.deepcopy(table))
44
45 - def add_tables(self, tables):
46 for table in tables: 47 self.append(copy.deepcopy(table))
48
49 - def confirm_table(self, table_name):
50 """Return table table_name, create the table if necessary. 51 """ 52 if not self.has_key(table_name): 53 table = mmCIF.mmCIFTable(table_name) 54 self.append(table) 55 else: 56 table = self[table_name] 57 return table
58
59 - def get_single(self, table_name, col_name):
60 """Utility function for getting a table where there should only be a 61 single row of data. 62 """ 63 try: 64 return self[table_name][col_name] 65 except KeyError: 66 return None
67
68 - def set_single(self, table_name, col_name, val):
69 """Utility function for setting a table where there should only be a 70 single row of data. 71 """ 72 if val == None: 73 return 74 75 table = self.confirm_table(table_name) 76 if len(table): 77 table[0][col_name] = val 78 else: 79 row = mmCIF.mmCIFRow() 80 table.append(row) 81 row[col_name] = val
82
83 - def get_entry_id(self):
84 """Methods to get/set the structure ID. 85 """ 86 return self.get_single("entry", "id")
87
88 - def set_entry_id(self, idcode):
89 self.set_single("entry", "id", idcode)
90
91 - def get_deposition_date(self):
92 """Return the original deposition date as stored in 93 _database_pdb_ref.date_original. 94 """ 95 return self.get_single("database_pdb_rev", "date_original")
96
97 - def set_deposition_date(self, date):
98 self.set_single("database_pdb_rev", "date_original")
99
100 - def get_struct_keywords(self):
101 """Return structure keywords as stored in 102 _struct_keywords.text. 103 """ 104 return self.get_single("struct_keywords", "text")
105 - def set_struct_keywords(self, text):
106 self.set_single("struct_keywords", "text", text)
107
108 - def get_struct_keywords(self):
109 """Return structure keywords as stored in 110 _struct_keywords.text. 111 """ 112 return self.get_single("struct_keywords", "text")
113 - def set_struct_keywords(self, text):
114 self.set_single("struct_keywords", "text", text)
115 116 117 ## ## generic data 118 ## set_ims("database_pdb_rev", "date_original", info_map, "date") 119 ## set_ims("struct_keywords", "text", info_map, "keywords") 120 ## set_ims("struct_keywords", "pdbx_keywords", info_map, "pdbx_keywords") 121 ## set_ims("struct", "title", info_map, "title") 122 123 ## ## X-ray experimental data 124 ## set_imf("refine", "ls_R_factor_R_work", info_map, "R_fact") 125 ## set_imf("refine", "ls_R_factor_R_free", info_map, "free_R_fact") 126 ## set_imf("refine", "ls_d_res_high", info_map, "res_high") 127 ## set_imf("refine", "ls_d_res_low", info_map, "res_low") 128