Package csb :: Package bio :: Package fragments :: Module hhsites
[frames] | no frames]

Source Code for Module csb.bio.fragments.hhsites

  1  """ 
  2  HMM fragments derived from HHpred HMM profiles. 
  3   
  4  @deprecated: This module may be removed in the future. 
  5  """ 
  6  import re 
  7  import csb.bio.fragments 
  8  import csb.bio.hmm 
  9  import csb.bio.structure as structure 
 10  import csb.bio.fragments.isites as isites 
 11   
 12  from csb.bio.hmm import ProfileHMMSegment, ProfileHMMRegion 
13 14 -class HMMFragment(ProfileHMMSegment):
15 """ 16 Describes a HMM segment which can be slid over a subject profile. 17 See the documentation of the base class for the signature of the 18 constructor. 19 """ 20
21 - def slide_over(self, other):
22 """ 23 Find instances of self by sliding it over other and computing 24 emission vector similarity and RSMD. 25 26 @param other: the subject HMM 27 @type other: L{ProfileHMM} 28 29 @return: a list of L{isites.ProfileMatch}-es 30 @rtype: list 31 """ 32 return self._slide_over(self, other)
33
34 - def _slide_over(self, this, that):
35 36 query_residues = this.chain() 37 window = this.layers.length 38 matches = [] 39 40 i = that.layers.start_index 41 while True: 42 if that.layers.last_index - i + 1 < window: 43 break 44 45 score, tm, tm_out, rmsd_ca = None, None, None, None 46 start = i 47 end = i + window - 1 48 49 subject = ProfileHMMRegion(that, start, end) 50 subject_residues = structure.Chain(that.id[4].upper(), residues=that.residues[start : start + window]) 51 52 score = this.emission_similarity(subject) 53 54 try: 55 rmsd_ca = query_residues.rmsd(subject_residues) 56 except structure.Broken3DStructureError: 57 rmsd_ca = None 58 59 if score is not None and (rmsd_ca is not None): 60 match = isites.ProfileMatch(that.id, start, score, rmsd_ca, None, tm, tm_out) 61 matches.append(match) 62 63 i += 1 64 65 return matches
66
67 -class HMMFragmentWrapper(HMMFragment):
68 """ 69 Describes a HMM segment which can be slid over a subject profile. 70 Wraps an existing L{ProfileHMMSegment} to decorate it with a slide_over 71 method. 72 73 @param hmm_segment: the HMM segment to wrap as a fragment 74 @type hmm_segment: L{ProfileHMMSegment} 75 """ 76
77 - def __init__(self, hmm_segment):
78 79 self._segment = hmm_segment
80
81 - def slide_over(self, other):
82 83 return self._slide_over(self._segment, other)
84
85 -class HMMLibraryWrapper(isites.Library):
86 """ 87 Library wrapper for H-Sites fragments. 88 89 @param fragments: a list of L{HMMFragment}s 90 @type list: 91 """ 92
93 - def __init__(self, fragments=None):
94 95 self._ondemand = False 96 97 self._fragments = [] 98 self._byid = {} 99 self._byrep = {} 100 self.name = 'HSites' 101 102 if fragments is not None: 103 self.fragments = fragments
104 105 @property
106 - def fragments(self):
107 return self._fragments
108 @fragments.setter
109 - def fragments(self, fragments):
110 self._fragments = [] 111 self._byid = {} 112 self._byrep = {} 113 for fragment in fragments: 114 self._fragments.append(fragment) 115 self._byid[fragment.isite] = fragment 116 self._byrep[fragment.id] = fragment
117 118 @property
119 - def clusters(self):
120 return self.fragments
121 @clusters.setter
122 - def clusters(self, clusters):
123 self.fragments = clusters
124
125 -class HMMFragmentMatch(csb.bio.fragments.FragmentMatch):
126
127 - def __init__(self, fragment, qstart, qend, probability, rmsd, tm_score, qlength):
128 129 if not isinstance(fragment, csb.bio.hmm.ProfileHMMSegment): 130 raise TypeError(fragment) 131 132 source_info = re.split('[\-\.]', fragment.id) 133 self._source = source_info[0] 134 self._start = int(source_info[1]) + fragment.source_start - 1 135 self._end = int(source_info[1]) + fragment.source_end - 1 136 137 assert (self._end - self._start + 1) == fragment.layers.length == (qend - qstart + 1) 138 139 super(HMMFragmentMatch, self).__init__(fragment.id, qstart, qend, probability, 140 rmsd, tm_score, qlength)
141 142 @property
143 - def source_id(self):
144 return self._source
145 146 @property
147 - def start(self):
148 return self._start
149 150 @property
151 - def end(self):
152 return self._end
153