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 """Module containing functions for the handling of peak intensities."""
26
27
28
29 import sys
30 from warnings import warn
31
32
33 from lib.errors import RelaxError
34 from lib.io import extract_data, read_spin_data, strip, write_data
35 from lib.spectrum import nmrpipe, nmrview, sparky, xeasy
36 from lib.spectrum.objects import Peak_list
37 from lib.warnings import RelaxWarning, RelaxNoSpinWarning
38 from pipe_control.mol_res_spin import generate_spin_id_unique, return_spin
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 for i in range(len(data_col)):
117
118 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):
119
120 if len(values) != 6 and data_present:
121 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))
122
123
124 elif data_present:
125
126 mol_name, res_num, res_name, spin_num, spin_name, value = values
127
128
129 intensity.append(value)
130
131
132 elif not data_present:
133
134 mol_name, res_num, res_name, spin_num, spin_name = values
135
136
137 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)
138
139
140 -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):
141 """Read the peak intensity data.
142
143 @keyword file: The name of the file containing the peak intensities.
144 @type file: str
145 @keyword dir: The directory where the file is located.
146 @type dir: str
147 @keyword int_col: The column containing the peak intensity data. If set to None, the auto-detection of intensity data will be attempted.
148 @type int_col: None or int
149 @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.
150 @type spin_id_col: int or None
151 @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.
152 @type mol_name_col: int or None
153 @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.
154 @type res_name_col: int or None
155 @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.
156 @type res_num_col: int or None
157 @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.
158 @type spin_name_col: int or None
159 @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.
160 @type spin_num_col: int or None
161 @keyword sep: The column separator which, if None, defaults to whitespace.
162 @type sep: str or None
163 @keyword spin_id: The spin ID string used to restrict data loading to a subset of all spins.
164 @type spin_id: None or str
165 @return: The peak list object containing all relevant data in the peak list.
166 @rtype: lib.spectrum.objects.Peak_list instance
167 """
168
169
170 file_data = extract_data(file, dir, sep=sep)
171
172
173 peak_list = Peak_list()
174
175
176 format = autodetect_format(file_data)
177
178
179 if format == 'generic':
180
181 print("Generic formatted data file.\n")
182
183
184 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)
185
186
187 elif format == 'nmrview':
188
189 print("NMRView formatted data file.\n")
190
191
192 nmrview.read_list(peak_list=peak_list, file_data=file_data)
193
194
195 elif format == 'seriestab':
196
197 print("NMRPipe SeriesTab formatted data file.\n")
198
199
200 nmrpipe.read_seriestab(peak_list=peak_list, file_data=file_data, int_col=int_col)
201
202
203 elif format == 'sparky':
204
205 print("Sparky formatted data file.\n")
206
207
208 sparky.read_list(peak_list=peak_list, file_data=file_data)
209
210
211 elif format == 'xeasy':
212
213 print("XEasy formatted data file.\n")
214
215
216 xeasy.read_list(peak_list=peak_list, file_data=file_data, int_col=int_col)
217
218
219 return peak_list
220