Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/allpy/file/835efa2a8c71/allpy/markup.py
Дата изменения: Unknown
Дата индексирования: Mon Feb 4 03:51:12 2013
Кодировка:
allpy: 835efa2a8c71 allpy/markup.py

allpy

view allpy/markup.py @ 817:835efa2a8c71

optimization of rasmol_homology: keep structure loaded of two sequences only One of steps of this program is superimposition of all sequences with main sequence and saving of all structures to pdb file. Loaded structure of all sequences is not needed to do this. At every moment only structure of main sequence and of superimposing sequence. This optimization results in essential memory saving. Output files should be the same to previous revision. To implement this optimization methods supeimpose and save_pdb of alignment were replaced with methods with same names of sequence. So some code is same as code of methods of alignment. Note: behaves as before, with superimpose and save_pdb methods of alignment. Model was returned by these methods but never used while generating spt script. This can result in collisions of rasmol selections when number of sequences is greater than max number of chains of one model.
author boris (kodomo) <bnagaev@gmail.com>
date Fri, 15 Jul 2011 02:23:27 +0400
parents 3566d253c994
children
line source
1 import base
3 default = object()
4 """ object for use as key for default value """
6 class Markup(object):
7 """ Markup for Sequence or Alignment
9 container is iterable collection of items.
10 item is object getting markup data (new attribute).
12 container: Alignment, item: Column
13 container: Sequence, item: Monomer
15 Markup stored in attributes of item is internal value.
16 When export or import, it is mapped to or from external value.
17 Internal value could be of any type.
18 External value should be single character.
20 Data:
21 * name -- name (str) of attribute of object
22 * container
23 * map_out -- dict, mapping internal values to external
24 * map_in -- dict, mapping external values to internal
26 map_in and map_out can have key markup.default, which used when
27 input key is not in map. To drop this defaults, drop this key
28 from map_out and map_in dicts. In this case to_string() and
29 from_string() methods can raise KeyError
30 """
32 def __init__(self, name, container, map_out={}):
33 """ Note: add convenient defaults to maps """
34 self.name = name
35 self.container = container
36 self.set_map_out(map_out)
37 self.set_internal_default()
38 self.set_external_default()
40 def set_map_out(self, map_out):
41 self.map_out = map_out
42 self.map_in = dict([(v, k) for (k, v) in self.map_out.items()])
44 def set_map_in(self, map_in):
45 self.map_in = map_in
46 self.map_out = dict([(v, k) for (k, v) in self.map_in.items()])
48 def set_internal_default(self, default_value=None):
49 self.map_in[default] = default_value
51 def set_external_default(self, default_value='-'):
52 self.map_out[default] = default_value
54 def __getitem__(self, item):
55 """ return internal value for given item
57 markup[monomer] <==> monomer.name, where name is markup.name
58 """
59 return getattr(item, self.name)
61 def __setitem__(self, item, value):
62 """ set attribute of item to value """
63 setattr(item, self.name, value)
65 def __contains__(self, item):
66 """ return item has attribute
68 usage: if item in markup
69 """
70 return hasattr(item, self.name)
72 def clear(self):
73 """ delete all attributes from items """
74 for item in self.keys():
75 delattr(item, self.name)
77 def to_string(self):
78 """ return string representing markup """
79 internal_values = []
80 for item in self.container:
81 if item in self and self[item] in self.map_out:
82 internal_values.append(self[item])
83 else:
84 internal_values.append(default)
85 return ''.join(self.map_out[i] for i in internal_values)
87 @classmethod
88 def from_string(cls, string, name, container, map_out={}):
89 """ return new markup
91 add (or replaces) attributes to items
92 """
93 assert len(string) == len(container)
94 self = cls(name, container, map_out)
95 for char, item in zip(list(string), self.container):
96 if char in self.map_in:
97 internal = self.map_in[char]
98 else:
99 internal = self.map_in[default]
100 setattr(item, self.name, internal)
101 return self
103 def items(self):
104 """ return list of tuples (item, self[item]) for items with attribute """
105 for item in self.container:
106 if item in self:
107 yield (item, self[item])
109 def keys(self):
110 """ return list of items for with attribute is determined """
111 for item in self.container:
112 if item in self:
113 yield item