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