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