Package Bio :: Package PDB :: Module Selection
[hide private]
[frames] | no frames]

Source Code for Module Bio.PDB.Selection

 1  # Copyright (C) 2002, Thomas Hamelryck (thamelry@binf.ku.dk) 
 2  # This code is part of the Biopython distribution and governed by its 
 3  # license.  Please see the LICENSE file that should have been included 
 4  # as part of this package. 
 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   
15 -def uniqueify(l):
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
23 -def get_unique_parents(entity_list):
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
34 -def unfold_entities(entity_list, target_level):
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 # single entity 50 entity_list=[entity_list] 51 # level of entity list 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 # already right level 60 return entity_list 61 if level_index>target_index: 62 # we're going down, e.g. S->A 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 # we're going up, e.g. A->S 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 # find unique parents 76 entity_list=uniqueify(new_entity_list) 77 return entity_list
78