1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 """Module containing functions for the handling of peak intensities."""
27
28
29
30 from warnings import warn
31
32
33 from lib.errors import RelaxError
34 from lib.io import extract_data, strip
35 from lib.sequence import read_spin_data
36 from lib.spectrum import nmrpipe, nmrview, sparky, xeasy
37 from lib.spectrum.objects import Peak_list
38 from lib.warnings import RelaxWarning
39
40
71
72
73 -def intensity_generic(peak_list=None, file_data=None, spin_id_col=None, mol_name_col=None, res_num_col=None, res_name_col=None, spin_num_col=None, spin_name_col=None, data_col=None, sep=None, spin_id=None):
74 """Extract the peak intensity information from the generic column formatted peak list.
75
76 @keyword peak_list: The peak list object to place all data into.
77 @type peak_list: lib.spectrum.objects.Peak_list instance
78 @keyword file_data: The data extracted from the file converted into a list of lists.
79 @type file_data: list of lists of str
80 @keyword spin_id_col: The column containing the spin ID strings (used by the generic intensity file format). If supplied, the mol_name_col, res_name_col, res_num_col, spin_name_col, and spin_num_col arguments must be none. @type spin_id_col: int or None @keyword mol_name_col: The column containing the molecule name information (used by the generic intensity file format). If supplied, spin_id_col must be None.
81 @type mol_name_col: int or None
82 @keyword res_name_col: The column containing the residue name information (used by the generic intensity file format). If supplied, spin_id_col must be None.
83 @type res_name_col: int or None
84 @keyword res_num_col: The column containing the residue number information (used by the generic intensity file format). If supplied, spin_id_col must be None.
85 @type res_num_col: int or None
86 @keyword spin_name_col: The column containing the spin name information (used by the generic intensity file format). If supplied, spin_id_col must be None.
87 @type spin_name_col: int or None
88 @keyword spin_num_col: The column containing the spin number information (used by the generic intensity file format). If supplied, spin_id_col must be None.
89 @type spin_num_col: int or None
90 @keyword data_col: The column containing the peak intensities.
91 @type data_col: int or list of int
92 @keyword sep: The column separator which, if None, defaults to whitespace.
93 @type sep: str or None
94 @keyword spin_id: The spin ID string used to restrict data loading to a subset of all spins.
95 @type spin_id: None or str
96 @raises RelaxError: When the expected peak intensity is not a float.
97 """
98
99
100 file_data = strip(file_data)
101
102
103 data_present = True
104 if data_col == None:
105 warn(RelaxWarning("The data column argument has not been supplied, and function will only return spin data."))
106 data_present = False
107
108
109 if not isinstance(data_col, list):
110 data_col = [data_col]
111
112
113 for line in file_data:
114
115 intensity = []
116 data_flag = False
117 for i in range(len(data_col)):
118
119 for values in read_spin_data(file_data=[line], spin_id_col=spin_id_col, mol_name_col=mol_name_col, res_num_col=res_num_col, res_name_col=res_name_col, spin_num_col=spin_num_col, spin_name_col=spin_name_col, data_col=data_col[i], sep=sep, spin_id=spin_id, raise_flag=False):
120
121 data_flag = True
122
123
124 if len(values) != 6 and data_present:
125 raise RelaxError("The molecule name, residue number and name, spin number and name, and value columns could not be found in the data %s." % repr(values))
126
127
128 elif data_present:
129
130 mol_name, res_num, res_name, spin_num, spin_name, value = values
131
132
133 intensity.append(value)
134
135
136 elif not data_present:
137
138 mol_name, res_num, res_name, spin_num, spin_name = values
139
140
141 if data_flag:
142 peak_list.add(mol_names=[mol_name, mol_name], res_nums=[res_num, res_num], res_names=[res_name, res_name], spin_nums=[spin_num, spin_num], spin_names=[spin_name, spin_name], intensity=intensity)
143
144
145 -def read_peak_list(file=None, dir=None, int_col=None, spin_id_col=None, mol_name_col=None, res_num_col=None, res_name_col=None, spin_num_col=None, spin_name_col=None, sep=None, spin_id=None):
146 """Read the peak intensity data.
147
148 @keyword file: The name of the file containing the peak intensities.
149 @type file: str
150 @keyword dir: The directory where the file is located.
151 @type dir: str
152 @keyword int_col: The column containing the peak intensity data. If set to None, the auto-detection of intensity data will be attempted.
153 @type int_col: None or int
154 @keyword spin_id_col: The column containing the spin ID strings (used by the generic intensity file format). If supplied, the mol_name_col, res_name_col, res_num_col, spin_name_col, and spin_num_col arguments must be none.
155 @type spin_id_col: int or None
156 @keyword mol_name_col: The column containing the molecule name information (used by the generic intensity file format). If supplied, spin_id_col must be None.
157 @type mol_name_col: int or None
158 @keyword res_name_col: The column containing the residue name information (used by the generic intensity file format). If supplied, spin_id_col must be None.
159 @type res_name_col: int or None
160 @keyword res_num_col: The column containing the residue number information (used by the generic intensity file format). If supplied, spin_id_col must be None.
161 @type res_num_col: int or None
162 @keyword spin_name_col: The column containing the spin name information (used by the generic intensity file format). If supplied, spin_id_col must be None.
163 @type spin_name_col: int or None
164 @keyword spin_num_col: The column containing the spin number information (used by the generic intensity file format). If supplied, spin_id_col must be None.
165 @type spin_num_col: int or None
166 @keyword sep: The column separator which, if None, defaults to whitespace.
167 @type sep: str or None
168 @keyword spin_id: The spin ID string used to restrict data loading to a subset of all spins.
169 @type spin_id: None or str
170 @return: The peak list object containing all relevant data in the peak list.
171 @rtype: lib.spectrum.objects.Peak_list instance
172 """
173
174
175 file_data = extract_data(file, dir, sep=sep)
176
177
178 peak_list = Peak_list()
179
180
181 format = autodetect_format(file_data)
182
183
184 if format == 'generic':
185
186 print("Generic formatted data file.\n")
187
188
189 intensity_generic(peak_list=peak_list, file_data=file_data, spin_id_col=spin_id_col, mol_name_col=mol_name_col, res_num_col=res_num_col, res_name_col=res_name_col, spin_num_col=spin_num_col, spin_name_col=spin_name_col, data_col=int_col, sep=sep, spin_id=spin_id)
190
191
192 elif format == 'nmrview':
193
194 print("NMRView formatted data file.\n")
195
196
197 nmrview.read_list(peak_list=peak_list, file_data=file_data)
198
199
200 elif format == 'seriestab':
201
202 print("NMRPipe SeriesTab formatted data file.\n")
203
204
205 nmrpipe.read_seriestab(peak_list=peak_list, file_data=file_data, int_col=int_col)
206
207
208 elif format == 'sparky':
209
210 print("Sparky formatted data file.\n")
211
212
213 sparky.read_list(peak_list=peak_list, file_data=file_data)
214
215
216 elif format == 'xeasy':
217
218 print("XEasy formatted data file.\n")
219
220
221 xeasy.read_list(peak_list=peak_list, file_data=file_data, int_col=int_col)
222
223
224 return peak_list
225