1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20   
 21   
 22   
 23  """Base classes for the relaxation data.""" 
 24   
 25   
 26  from bmrblib.base_classes import BaseSaveframe, TagCategory 
 27   
 28   
 30      """The heteronuclear Rx data saveframe baseclass.""" 
 31   
 33          """Loop over the Rx saveframes, yielding the relaxation data. 
 34   
 35          @return:    The relaxation data consisting of the proton frequency, residue numbers, residue 
 36                      names, atom names, values, and errors. 
 37          @rtype:     tuple of float, list of int, list of str, list of str, list of float, list of 
 38                      float 
 39          """ 
 40   
 41           
 42          self.specific_setup() 
 43   
 44           
 45          sf_name = getattr(self, 'cat_name')[0] 
 46   
 47           
 48          for datanode in self.datanodes: 
 49               
 50              found = False 
 51              for index in range(len(datanode.tagtables[0].tagnames)): 
 52                   
 53                  if datanode.tagtables[0].tagnames[index] == self.heteronuclRxlist.create_tag_label(self.heteronuclRxlist.tag_names['SfCategory']): 
 54                       
 55                      if datanode.tagtables[0].tagvalues[index][0] == sf_name: 
 56                          found = True 
 57                          break 
 58   
 59               
 60              if not found: 
 61                  continue 
 62   
 63               
 64              frq = self.heteronuclRxlist.read(datanode.tagtables[0]) 
 65   
 66               
 67              entity_ids, res_nums, res_names, atom_names, values, errors = self.Rx.read(datanode.tagtables[1]) 
 68   
 69               
 70              yield frq, entity_ids, res_nums, res_names, atom_names, values, errors 
  71   
 72   
 74          """Method called by self.add() to set up any version specific data.""" 
 75   
 76          self.cat_name = [self.label+'_relaxation'] 
   77   
 78   
 79   
 81      """Base class for the HeteronuclRxList tag categories.""" 
 82   
 83 -    def read(self, tagtable): 
  84          """Extract the HeteronuclRxList tag category info. 
 85   
 86          @param tagtable:    The HeteronuclRxList tagtable. 
 87          @type tagtable:     Tagtable instance 
 88          @return:            The proton frequency in Hz. 
 89          @rtype:             float 
 90          """ 
 91   
 92           
 93          frq = float(tagtable.tagvalues[tagtable.tagnames.index(self.tag_names_full['SpectrometerFrequency1H'])][0]) * 1e6 
 94   
 95           
 96          return frq 
   97   
 98   
 99 -class Rx(TagCategory): 
 100      """Base class for the Rx tag categories.""" 
101   
103          """Create the Rx tag category.""" 
104   
105           
106          info = [ 
107              ['RxID',                'data_ids'], 
108              ['AssemblyAtomID',      'assembly_atom_ids'], 
109              ['EntityAssemblyID',    'entity_assembly_ids'], 
110              ['EntityID',            'entity_ids'], 
111              ['CompIndexID',         'res_nums'], 
112              ['SeqID',               'seq_id'], 
113              ['CompID',              'res_names'], 
114              ['AtomID',              'atom_names'], 
115              ['AtomType',            'atom_types'], 
116              ['AtomIsotopeNumber',   'isotope'], 
117              ['Val',                 'data'], 
118              ['ValErr',              'errors'], 
119              ['HeteronuclRxListID',  'rx_inc_list'] 
120          ] 
121   
122           
123          table = self.create_tag_table(info) 
124   
125           
126          self.sf.frame.tagtables.append(table) 
 127   
128   
129 -    def read(self, tagtable): 
 130          """Extract the Rx tag category info. 
131   
132          @param tagtable:    The Rx tagtable. 
133          @type tagtable:     Tagtable instance 
134          @return:            The residue numbers, residue names, atom names, values, and errors. 
135          @rtype:             tuple of list of int, list of str, list of str, list of float, list of 
136                              float 
137          """ 
138   
139           
140          entity_ids = tagtable.tagvalues[tagtable.tagnames.index(self.tag_names_full['EntityID'])] 
141          res_nums = tagtable.tagvalues[tagtable.tagnames.index(self.tag_names_full['CompIndexID'])] 
142          res_names = tagtable.tagvalues[tagtable.tagnames.index(self.tag_names_full['CompID'])] 
143          atom_names = tagtable.tagvalues[tagtable.tagnames.index(self.tag_names_full['AtomID'])] 
144          values = tagtable.tagvalues[tagtable.tagnames.index(self.tag_names_full['Val'])] 
145          errors = tagtable.tagvalues[tagtable.tagnames.index(self.tag_names_full['ValErr'])] 
146   
147           
148          for i in range(len(res_nums)): 
149              res_nums[i] = int(res_nums[i]) 
150              if values[i] == '?': 
151                  values[i] = None 
152              else: 
153                  values[i] = float(values[i]) 
154              if errors[i] == '?': 
155                  errors[i] = None 
156              else: 
157                  errors[i] = float(errors[i]) 
158   
159           
160          return entity_ids, res_nums, res_names, atom_names, values, errors 
 161   
162   
163 -    def tag_setup(self, tag_category_label=None, sep=None): 
 164          """Replacement method for setting up the tag names. 
165   
166          @keyword tag_category_label:    The tag name prefix specific for the tag category. 
167          @type tag_category_label:       None or str 
168          @keyword sep:                   The string separating the tag name prefix and suffix. 
169          @type sep:                      str 
170          """ 
171   
172           
173          TagCategory.tag_setup(self, tag_category_label=tag_category_label, sep=sep) 
174   
175           
176          self.tag_names['RxID'] = None 
177          self.tag_names['AssemblyAtomID'] = 'Assembly_atom_ID' 
178          self.tag_names['EntityAssemblyID'] = 'Entity_assembly_ID' 
179          self.tag_names['EntityID'] = 'Entity_ID' 
180          self.tag_names['CompIndexID'] = 'Residue_seq_code' 
181          self.tag_names['SeqID'] = 'Seq_ID' 
182          self.tag_names['CompID'] = 'Residue_label' 
183          self.tag_names['AtomID'] = 'Atom_name' 
184          self.tag_names['AtomType'] = 'Atom_type' 
185          self.tag_names['AtomIsotopeNumber'] = 'Atom_isotope_number' 
186          self.tag_names['Val'] = self.sf.label+'_value' 
187          self.tag_names['ValErr'] = self.sf.label+'_value_error' 
188          self.tag_names['HeteronuclRxListID'] = 'Heteronucl_'+self.sf.label+'_list_ID' 
  189