Package lib :: Package spectrum :: Module peak_list
[hide private]
[frames] | no frames]

Source Code for Module lib.spectrum.peak_list

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2004-2014 Edward d'Auvergne                                   # 
  4  # Copyright (C) 2008 Sebastien Morin                                          # 
  5  # Copyright (C) 2013 Troels E. Linnet                                         # 
  6  #                                                                             # 
  7  # This file is part of the program relax (http://www.nmr-relax.com).          # 
  8  #                                                                             # 
  9  # This program is free software: you can redistribute it and/or modify        # 
 10  # it under the terms of the GNU General Public License as published by        # 
 11  # the Free Software Foundation, either version 3 of the License, or           # 
 12  # (at your option) any later version.                                         # 
 13  #                                                                             # 
 14  # This program is distributed in the hope that it will be useful,             # 
 15  # but WITHOUT ANY WARRANTY; without even the implied warranty of              # 
 16  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               # 
 17  # GNU General Public License for more details.                                # 
 18  #                                                                             # 
 19  # You should have received a copy of the GNU General Public License           # 
 20  # along with this program.  If not, see <http://www.gnu.org/licenses/>.       # 
 21  #                                                                             # 
 22  ############################################################################### 
 23   
 24  # Module docstring. 
 25  """Module containing functions for the handling of peak intensities.""" 
 26   
 27   
 28  # Python module imports. 
 29  from warnings import warn 
 30   
 31  # relax module imports. 
 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   
40 -def autodetect_format(file_data):
41 """Automatically detect the format of the peak list. 42 43 @param file_data: The processed results file data. 44 @type file_data: list of lists of str 45 """ 46 47 # The first header line. 48 for line in file_data: 49 if line != []: 50 break 51 52 # Sparky format. 53 if line[0] == 'Assignment': 54 return 'sparky' 55 56 # NMRView format. 57 if line == ['label', 'dataset', 'sw', 'sf']: 58 return 'nmrview' 59 60 # NMRPipe SeriesTab. 61 if line[0] == 'REMARK' and line[1] == 'SeriesTab': 62 return 'seriestab' 63 64 # XEasy format. 65 if line == ['No.', 'Color', 'w1', 'w2', 'ass.', 'in', 'w1', 'ass.', 'in', 'w2', 'Volume', 'Vol.', 'Err.', 'Method', 'Comment']: 66 return 'xeasy' 67 68 # Assume a generic format. 69 return 'generic'
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 # Strip the data. 99 file_data = strip(file_data) 100 101 # Check the intensity column argument. 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 # Convert the the data_col argument to a list if needed. 108 if not isinstance(data_col, list): 109 data_col = [data_col] 110 111 # Loop over the file data. 112 for line in file_data: 113 # Loop over the intensity columns, storing the data. 114 intensity = [] 115 for i in range(len(data_col)): 116 # Extract the data for the single line (loop of a single element). 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 # Check the values. 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 # Unpack when peak data is present 123 elif data_present: 124 # Unpack. 125 mol_name, res_num, res_name, spin_num, spin_name, value = values 126 127 # Store the intensity. 128 intensity.append(value) 129 130 # Unpack when peak data is not present. 131 elif not data_present: 132 # Unpack. 133 mol_name, res_num, res_name, spin_num, spin_name = values 134 135 # Add the assignment to the peak list object. 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 # Extract the data from the file. 169 file_data = extract_data(file, dir, sep=sep) 170 171 # Initialise the peak list object. 172 peak_list = Peak_list() 173 174 # Automatic format detection. 175 format = autodetect_format(file_data) 176 177 # Generic. 178 if format == 'generic': 179 # Print out. 180 print("Generic formatted data file.\n") 181 182 # Extract the data. 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 # NMRView. 186 elif format == 'nmrview': 187 # Print out. 188 print("NMRView formatted data file.\n") 189 190 # Extract the data. 191 nmrview.read_list(peak_list=peak_list, file_data=file_data) 192 193 # NMRPipe SeriesTab. 194 elif format == 'seriestab': 195 # Print out. 196 print("NMRPipe SeriesTab formatted data file.\n") 197 198 # Extract the data. 199 nmrpipe.read_seriestab(peak_list=peak_list, file_data=file_data, int_col=int_col) 200 201 # Sparky. 202 elif format == 'sparky': 203 # Print out. 204 print("Sparky formatted data file.\n") 205 206 # Extract the data. 207 sparky.read_list(peak_list=peak_list, file_data=file_data) 208 209 # XEasy. 210 elif format == 'xeasy': 211 # Print out. 212 print("XEasy formatted data file.\n") 213 214 # Extract the data. 215 xeasy.read_list(peak_list=peak_list, file_data=file_data, int_col=int_col) 216 217 # Return the peak list object. 218 return peak_list
219