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-2013 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  import sys 
 30  from warnings import warn 
 31   
 32  # relax module imports. 
 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   
41 -def autodetect_format(file_data):
42 """Automatically detect the format of the peak list. 43 44 @param file_data: The processed results file data. 45 @type file_data: list of lists of str 46 """ 47 48 # The first header line. 49 for line in file_data: 50 if line != []: 51 break 52 53 # Sparky format. 54 if line[0] == 'Assignment': 55 return 'sparky' 56 57 # NMRView format. 58 if line == ['label', 'dataset', 'sw', 'sf']: 59 return 'nmrview' 60 61 # NMRPipe SeriesTab. 62 if line[0] == 'REMARK' and line[1] == 'SeriesTab': 63 return 'seriestab' 64 65 # XEasy format. 66 if line == ['No.', 'Color', 'w1', 'w2', 'ass.', 'in', 'w1', 'ass.', 'in', 'w2', 'Volume', 'Vol.', 'Err.', 'Method', 'Comment']: 67 return 'xeasy' 68 69 # Assume a generic format. 70 return 'generic'
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 # Strip the data. 100 file_data = strip(file_data) 101 102 # Check the intensity column argument. 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 # Convert the the data_col argument to a list if needed. 109 if not isinstance(data_col, list): 110 data_col = [data_col] 111 112 # Loop over the file data. 113 for line in file_data: 114 # Loop over the intensity columns, storing the data. 115 intensity = [] 116 for i in range(len(data_col)): 117 # Extract the data for the single line (loop of a single element). 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 # Check the values. 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 # Unpack when peak data is present 124 elif data_present: 125 # Unpack. 126 mol_name, res_num, res_name, spin_num, spin_name, value = values 127 128 # Store the intensity. 129 intensity.append(value) 130 131 # Unpack when peak data is not present. 132 elif not data_present: 133 # Unpack. 134 mol_name, res_num, res_name, spin_num, spin_name = values 135 136 # Add the assignment to the peak list object. 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 # Extract the data from the file. 170 file_data = extract_data(file, dir, sep=sep) 171 172 # Initialise the peak list object. 173 peak_list = Peak_list() 174 175 # Automatic format detection. 176 format = autodetect_format(file_data) 177 178 # Generic. 179 if format == 'generic': 180 # Print out. 181 print("Generic formatted data file.\n") 182 183 # Extract the data. 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 # NMRView. 187 elif format == 'nmrview': 188 # Print out. 189 print("NMRView formatted data file.\n") 190 191 # Extract the data. 192 nmrview.read_list(peak_list=peak_list, file_data=file_data) 193 194 # NMRPipe SeriesTab. 195 elif format == 'seriestab': 196 # Print out. 197 print("NMRPipe SeriesTab formatted data file.\n") 198 199 # Extract the data. 200 nmrpipe.read_seriestab(peak_list=peak_list, file_data=file_data, int_col=int_col) 201 202 # Sparky. 203 elif format == 'sparky': 204 # Print out. 205 print("Sparky formatted data file.\n") 206 207 # Extract the data. 208 sparky.read_list(peak_list=peak_list, file_data=file_data) 209 210 # XEasy. 211 elif format == 'xeasy': 212 # Print out. 213 print("XEasy formatted data file.\n") 214 215 # Extract the data. 216 xeasy.read_list(peak_list=peak_list, file_data=file_data, int_col=int_col) 217 218 # Return the peak list object. 219 return peak_list
220