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