1
2
3
4
5
6 from types import ListType
7
8 from PDBExceptions import PDBException
9
10 __doc__="Selection of atoms, residues, etc."
11
12
13 entity_levels=["A", "R", "C", "M", "S"]
14
16 "Return unique items in list l."
17 d={}
18 for i in l:
19 if not d.has_key(i):
20 d[i]=None
21 return d.keys()
22
24 """
25 Translate a list of entities to a list of their
26 (unique) parents.
27 """
28 l=[]
29 for entity in entity_list:
30 parent=entity.get_parent()
31 l.append(parent)
32 return uniqueify(l)
33
35 """
36 Unfold a list of entities to a list of entities of another
37 level. E.g.:
38
39 list of atoms -> list of residues
40 list of modules -> list of atoms
41 list of residues -> list of chains
42
43 o entity_list - list of entities or a single entity
44 o target_level - char (A, R, C, M, S)
45 """
46 if not target_level in entity_levels:
47 raise PDBException("%s: Not an entity level." % target_level)
48 if type(entity_list)!=ListType:
49
50 entity_list=[entity_list]
51
52 level=entity_list[0].get_level()
53 for entity in entity_list:
54 if not (entity.get_level()==level):
55 raise PDBException("Entity list is not homogeneous.")
56 target_index=entity_levels.index(target_level)
57 level_index=entity_levels.index(level)
58 if level_index==target_index:
59
60 return entity_list
61 if level_index>target_index:
62
63 for i in range(target_index, level_index):
64 new_entity_list=[]
65 for entity in entity_list:
66 new_entity_list=new_entity_list+entity.get_list()
67 entity_list=new_entity_list
68 else:
69
70 for i in range(level_index, target_index):
71 new_entity_list=[]
72 for entity in entity_list:
73 parent=entity.get_parent()
74 new_entity_list.append(parent)
75
76 entity_list=uniqueify(new_entity_list)
77 return entity_list
78