def read_spins(file=None, dir=None, dim=1, 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, verbose=True): """Read the peak intensity data. @keyword file: The name of the file containing the peak intensities. @type file: str @keyword dir: The directory where the file is located. @type dir: str @keyword dim: The dimension of the peak list to associate the data with. @type dim: int @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. @type mol_name_col: int or None @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. @type res_name_col: int or None @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. @type res_num_col: int or None @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. @type spin_name_col: int or None @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. @type spin_num_col: int or None @keyword sep: The column separator which, if None, defaults to whitespace. @type sep: str or None @keyword spin_id: The spin ID string used to restrict data loading to a subset of all spins. If 'auto' is provided for a NMRPipe seriesTab formatted file, the ID's are auto generated in form of Z_Ai. @type spin_id: None or str @keyword verbose: A flag which if True will cause all relaxation data loaded to be printed out. @type verbose: bool """ # Data checks. check_pipe() # Check the file name. if file == None: raise RelaxError("The file name must be supplied.") # Read the peak list data. peak_list = read_peak_list(file=file, dir=dir, 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, sep=sep, spin_id=spin_id) # Loop over the peak_list. created_spins = [] for assign in peak_list: mol_name = assign.mol_names[dim-1] res_num = assign.res_nums[dim-1] res_name = assign.res_names[dim-1] spin_num = assign.spin_nums[dim-1] spin_name = assign.spin_names[dim-1] # Generate the spin_id. spin_id = generate_spin_id_unique(mol_name=mol_name, res_num=res_num, res_name=res_name, spin_name=spin_name) # Check if the spin already exist. if return_spin(spin_id=spin_id) == None: # Create the spin if not exist. create_spin(spin_num=spin_num, spin_name=spin_name, res_num=res_num, res_name=res_name, mol_name=mol_name) # Test that data exists. check_mol_res_spin_data()
def read_spins(file=None, dir=None, dim=1, 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, verbose=True): """Read the peak intensity data. @keyword file: The name of the file containing the peak intensities. @type file: str @keyword dir: The directory where the file is located. @type dir: str @keyword dim: The dimension of the peak list to associate the data with. @type dim: int @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. @type mol_name_col: int or None @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. @type res_name_col: int or None @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. @type res_num_col: int or None @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. @type spin_name_col: int or None @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. @type spin_num_col: int or None @keyword sep: The column separator which, if None, defaults to whitespace. @type sep: str or None @keyword spin_id: The spin ID string used to restrict data loading to a subset of all spins. If 'auto' is provided for a NMRPipe seriesTab formatted file, the ID's are auto generated in form of Z_Ai. @type spin_id: None or str @keyword verbose: A flag which if True will cause all relaxation data loaded to be printed out. @type verbose: bool """ # Data checks. check_pipe() # Check the file name. if file == None: raise RelaxError("The file name must be supplied.") # Read the peak list data. peak_list = read_peak_list(file=file, dir=dir, 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, sep=sep, spin_id=spin_id) # Loop over the peak_list. created_spins = [] for assign in peak_list: mol_name = assign.mol_names[dim - 1] res_num = assign.res_nums[dim - 1] res_name = assign.res_names[dim - 1] spin_num = assign.spin_nums[dim - 1] spin_name = assign.spin_names[dim - 1] # Generate the spin_id. spin_id = generate_spin_id_unique(mol_name=mol_name, res_num=res_num, res_name=res_name, spin_name=spin_name) # Check if the spin already exist. if return_spin(spin_id=spin_id) == None: # Create the spin if not exist. create_spin(spin_num=spin_num, spin_name=spin_name, res_num=res_num, res_name=res_name, mol_name=mol_name) # Test that data exists. check_mol_res_spin_data()
def read(file=None, dir=None, spectrum_id=None, dim=1, int_col=None, int_method=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, ncproc=None, verbose=True): """Read the peak intensity data. @keyword file: The name of the file(s) containing the peak intensities. @type file: str or list of str @keyword dir: The directory where the file is located. @type dir: str @keyword spectrum_id: The spectrum identification string. @type spectrum_id: str or list of str @keyword dim: The dimension of the peak list to associate the data with. @type dim: int @keyword int_col: The column containing the peak intensity data (used by the generic intensity file format). @type int_col: int or list of int @keyword int_method: The integration method, one of 'height', 'point sum' or 'other'. @type int_method: str @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. @type mol_name_col: int or None @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. @type res_name_col: int or None @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. @type res_num_col: int or None @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. @type spin_name_col: int or None @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. @type spin_num_col: int or None @keyword sep: The column separator which, if None, defaults to whitespace. @type sep: str or None @keyword spin_id: The spin ID string used to restrict data loading to a subset of all spins. If 'auto' is provided for a NMRPipe seriesTab formatted file, the ID's are auto generated in form of Z_Ai. @type spin_id: None or str @keyword ncproc: The Bruker ncproc binary intensity scaling factor. @type ncproc: int or None @keyword verbose: A flag which if True will cause all relaxation data loaded to be printed out. @type verbose: bool """ # Data checks. check_pipe() check_mol_res_spin_data() # Check the file name. if file == None: raise RelaxError("The file name must be supplied.") # Test that the intensity measures are identical. if hasattr(cdp, 'int_method') and cdp.int_method != int_method: raise RelaxError( "The '%s' measure of peak intensities does not match '%s' of the previously loaded spectra." % (int_method, cdp.int_method)) # Multiple ID flags. flag_multi = False flag_multi_file = False flag_multi_col = False if isinstance(spectrum_id, list) or spectrum_id == 'auto': flag_multi = True if isinstance(file, list): flag_multi_file = True if isinstance(int_col, list) or spectrum_id == 'auto': flag_multi_col = True # List argument checks. if flag_multi: # Too many lists. if flag_multi_file and flag_multi_col: raise RelaxError( "If a list of spectrum IDs is supplied, the file names and intensity column arguments cannot both be lists." ) # Not enough lists. if not flag_multi_file and not flag_multi_col: raise RelaxError( "If a list of spectrum IDs is supplied, either the file name or intensity column arguments must be a list of equal length." ) # List lengths for multiple files. if flag_multi_file and len(spectrum_id) != len(file): raise RelaxError( "The file list %s and spectrum ID list %s do not have the same number of elements." % (file, spectrum_id)) # List lengths for multiple intensity columns. if flag_multi_col and spectrum_id != 'auto' and len( spectrum_id) != len(int_col): raise RelaxError( "The spectrum ID list %s and intensity column list %s do not have the same number of elements." % (spectrum_id, int_col)) # More list argument checks (when only one spectrum ID is supplied). else: # Multiple files. if flag_multi_file: raise RelaxError( "If multiple files are supplied, then multiple spectrum IDs must also be supplied." ) # Multiple intensity columns. if flag_multi_col: raise RelaxError( "If multiple intensity columns are supplied, then multiple spectrum IDs must also be supplied." ) # Intensity column checks. if spectrum_id != 'auto' and not flag_multi and flag_multi_col: raise RelaxError( "If a list of intensity columns is supplied, the spectrum ID argument must also be a list of equal length." ) # Check the intensity measure. if not int_method in ['height', 'point sum', 'other']: raise RelaxError( "The intensity measure '%s' is not one of 'height', 'point sum', 'other'." % int_method) # Set the peak intensity measure. cdp.int_method = int_method # Convert the file argument to a list if necessary. if not isinstance(file, list): file = [file] # Loop over all files. for file_index in range(len(file)): # Read the peak list data. peak_list = read_peak_list(file=file[file_index], dir=dir, int_col=int_col, 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, sep=sep, spin_id=spin_id) # Automatic spectrum IDs. if spectrum_id == 'auto': spectrum_id = peak_list[0].intensity_name # Loop over the assignments. data = [] data_flag = False for assign in peak_list: # Generate the spin_id. spin_id = generate_spin_id_unique(res_num=assign.res_nums[dim - 1], spin_name=assign.spin_names[dim - 1]) # Convert the intensity data to a list if needed. intensity = assign.intensity if not isinstance(intensity, list): intensity = [intensity] # Loop over the intensity data. for int_index in range(len(intensity)): # Sanity check. if intensity[int_index] == 0.0: warn( RelaxWarning( "A peak intensity of zero has been encountered for the spin '%s' - this could be fatal later on." % spin_id)) # Get the spin container. spin = return_spin(spin_id=spin_id) if not spin: warn(RelaxNoSpinWarning(spin_id)) continue # Skip deselected spins. if not spin.select: continue # Initialise. if not hasattr(spin, 'peak_intensity'): spin.peak_intensity = {} # Intensity scaling. if ncproc != None: intensity[int_index] = intensity[int_index] / float(2** ncproc) # Add the data. if flag_multi_file: id = spectrum_id[file_index] elif flag_multi_col: id = spectrum_id[int_index] else: id = spectrum_id spin.peak_intensity[id] = intensity[int_index] # Switch the flag. data_flag = True # Append the data for printing out. data.append([spin_id, repr(intensity[int_index])]) # Add the spectrum id (and ncproc) to the relax data store. spectrum_ids = spectrum_id if isinstance(spectrum_id, str): spectrum_ids = [spectrum_id] if ncproc != None and not hasattr(cdp, 'ncproc'): cdp.ncproc = {} for i in range(len(spectrum_ids)): add_spectrum_id(spectrum_ids[i]) if ncproc != None: cdp.ncproc[spectrum_ids[i]] = ncproc # No data. if not data_flag: # Delete all the data. delete(spectrum_id) # Raise the error. raise RelaxError("No data could be loaded from the peak list") # Printout. if verbose: print( "\nThe following intensities have been loaded into the relax data store:\n" ) write_data(out=sys.stdout, headings=["Spin_ID", "Intensity"], data=data) print('')
def read(file=None, dir=None, spectrum_id=None, dim=1, int_col=None, int_method=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, ncproc=None, verbose=True): """Read the peak intensity data. @keyword file: The name of the file(s) containing the peak intensities. @type file: str or list of str @keyword dir: The directory where the file is located. @type dir: str @keyword spectrum_id: The spectrum identification string. @type spectrum_id: str or list of str @keyword dim: The dimension of the peak list to associate the data with. @type dim: int @keyword int_col: The column containing the peak intensity data (used by the generic intensity file format). @type int_col: int or list of int @keyword int_method: The integration method, one of 'height', 'point sum' or 'other'. @type int_method: str @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. @type mol_name_col: int or None @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. @type res_name_col: int or None @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. @type res_num_col: int or None @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. @type spin_name_col: int or None @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. @type spin_num_col: int or None @keyword sep: The column separator which, if None, defaults to whitespace. @type sep: str or None @keyword spin_id: The spin ID string used to restrict data loading to a subset of all spins. If 'auto' is provided for a NMRPipe seriesTab formatted file, the ID's are auto generated in form of Z_Ai. @type spin_id: None or str @keyword ncproc: The Bruker ncproc binary intensity scaling factor. @type ncproc: int or None @keyword verbose: A flag which if True will cause all relaxation data loaded to be printed out. @type verbose: bool """ # Data checks. check_pipe() check_mol_res_spin_data() # Check the file name. if file == None: raise RelaxError("The file name must be supplied.") # Test that the intensity measures are identical. if hasattr(cdp, 'int_method') and cdp.int_method != int_method: raise RelaxError("The '%s' measure of peak intensities does not match '%s' of the previously loaded spectra." % (int_method, cdp.int_method)) # Multiple ID flags. flag_multi = False flag_multi_file = False flag_multi_col = False if isinstance(spectrum_id, list) or spectrum_id == 'auto': flag_multi = True if isinstance(file, list): flag_multi_file = True if isinstance(int_col, list) or spectrum_id == 'auto': flag_multi_col = True # List argument checks. if flag_multi: # Too many lists. if flag_multi_file and flag_multi_col: raise RelaxError("If a list of spectrum IDs is supplied, the file names and intensity column arguments cannot both be lists.") # Not enough lists. if not flag_multi_file and not flag_multi_col: raise RelaxError("If a list of spectrum IDs is supplied, either the file name or intensity column arguments must be a list of equal length.") # List lengths for multiple files. if flag_multi_file and len(spectrum_id) != len(file): raise RelaxError("The file list %s and spectrum ID list %s do not have the same number of elements." % (file, spectrum_id)) # List lengths for multiple intensity columns. if flag_multi_col and spectrum_id != 'auto' and len(spectrum_id) != len(int_col): raise RelaxError("The spectrum ID list %s and intensity column list %s do not have the same number of elements." % (spectrum_id, int_col)) # More list argument checks (when only one spectrum ID is supplied). else: # Multiple files. if flag_multi_file: raise RelaxError("If multiple files are supplied, then multiple spectrum IDs must also be supplied.") # Multiple intensity columns. if flag_multi_col: raise RelaxError("If multiple intensity columns are supplied, then multiple spectrum IDs must also be supplied.") # Intensity column checks. if spectrum_id != 'auto' and not flag_multi and flag_multi_col: raise RelaxError("If a list of intensity columns is supplied, the spectrum ID argument must also be a list of equal length.") # Check the intensity measure. if not int_method in ['height', 'point sum', 'other']: raise RelaxError("The intensity measure '%s' is not one of 'height', 'point sum', 'other'." % int_method) # Set the peak intensity measure. cdp.int_method = int_method # Convert the file argument to a list if necessary. if not isinstance(file, list): file = [file] # Loop over all files. for file_index in range(len(file)): # Read the peak list data. peak_list = read_peak_list(file=file[file_index], dir=dir, int_col=int_col, 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, sep=sep, spin_id=spin_id) # Automatic spectrum IDs. if spectrum_id == 'auto': spectrum_id = peak_list[0].intensity_name # Loop over the assignments. data = [] data_flag = False for assign in peak_list: # Generate the spin_id. spin_id = generate_spin_id_unique(res_num=assign.res_nums[dim-1], spin_name=assign.spin_names[dim-1]) # Convert the intensity data to a list if needed. intensity = assign.intensity if not isinstance(intensity, list): intensity = [intensity] # Loop over the intensity data. for int_index in range(len(intensity)): # Sanity check. if intensity[int_index] == 0.0: warn(RelaxWarning("A peak intensity of zero has been encountered for the spin '%s' - this could be fatal later on." % spin_id)) # Get the spin container. spin = return_spin(spin_id) if not spin: warn(RelaxNoSpinWarning(spin_id)) continue # Skip deselected spins. if not spin.select: continue # Initialise. if not hasattr(spin, 'peak_intensity'): spin.peak_intensity = {} # Intensity scaling. if ncproc != None: intensity[int_index] = intensity[int_index] / float(2**ncproc) # Add the data. if flag_multi_file: id = spectrum_id[file_index] elif flag_multi_col: id = spectrum_id[int_index] else: id = spectrum_id spin.peak_intensity[id] = intensity[int_index] # Switch the flag. data_flag = True # Append the data for printing out. data.append([spin_id, repr(intensity[int_index])]) # Add the spectrum id (and ncproc) to the relax data store. spectrum_ids = spectrum_id if isinstance(spectrum_id, str): spectrum_ids = [spectrum_id] if ncproc != None and not hasattr(cdp, 'ncproc'): cdp.ncproc = {} for i in range(len(spectrum_ids)): add_spectrum_id(spectrum_ids[i]) if ncproc != None: cdp.ncproc[spectrum_ids[i]] = ncproc # No data. if not data_flag: # Delete all the data. delete(spectrum_id) # Raise the error. raise RelaxError("No data could be loaded from the peak list") # Printout. if verbose: print("\nThe following intensities have been loaded into the relax data store:\n") write_data(out=sys.stdout, headings=["Spin_ID", "Intensity"], data=data) print('')
def read(file=None, dir=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, verbose=True): """Read the peak intensity data. @keyword file: The name of the file containing the peak intensities. @type file: str @keyword dir: The directory where the file is located. @type dir: str @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. @type mol_name_col: int or None @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. @type res_name_col: int or None @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. @type res_num_col: int or None @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. @type spin_name_col: int or None @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. @type spin_num_col: int or None @keyword sep: The column separator which, if None, defaults to whitespace. @type sep: str or None @keyword spin_id: The spin ID string used to restrict data loading to a subset of all spins. If 'auto' is provided for a NMRPipe seriesTab formatted file, the ID's are auto generated in form of Z_Ai. @type spin_id: None or str @keyword verbose: A flag which if True will cause all chemical shift data loaded to be printed out. @type verbose: bool """ # Test if the current data pipe exists. check_pipe() # Test if sequence data is loaded. if not exists_mol_res_spin_data(): raise RelaxNoSequenceError # Check the file name. if file == None: raise RelaxError("The file name must be supplied.") # Read the peak list data. peak_list = read_peak_list(file=file, dir=dir, 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, sep=sep, spin_id=spin_id) # Loop over the assignments. data = [] data_flag = False for assign in peak_list: # Loop over the dimensions of the peak list. for i in range(peak_list.dimensionality): # Generate the spin_id. spin_id = generate_spin_id_unique(res_num=assign.res_nums[i], spin_name=assign.spin_names[i]) # Get the spin container. spin = return_spin(spin_id) if not spin: warn(RelaxNoSpinWarning(spin_id)) continue # Skip deselected spins. if not spin.select: continue # Store the shift. spin.chemical_shift = assign.shifts[i] # Switch the flag. data_flag = True # Append the data for printing out. data.append([spin_id, repr(spin.chemical_shift)]) # No data. if not data_flag: raise RelaxError("No chemical shifts could be loaded from the peak list") # Print out. if verbose: print("\nThe following chemical shifts have been loaded into the relax data store:\n") write_data(out=sys.stdout, headings=["Spin_ID", "Chemical shift"], data=data)
def read(file=None, dir=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, verbose=True): """Read the peak intensity data. @keyword file: The name of the file containing the peak intensities. @type file: str @keyword dir: The directory where the file is located. @type dir: str @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. @type mol_name_col: int or None @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. @type res_name_col: int or None @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. @type res_num_col: int or None @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. @type spin_name_col: int or None @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. @type spin_num_col: int or None @keyword sep: The column separator which, if None, defaults to whitespace. @type sep: str or None @keyword spin_id: The spin ID string used to restrict data loading to a subset of all spins. If 'auto' is provided for a NMRPipe seriesTab formatted file, the ID's are auto generated in form of Z_Ai. @type spin_id: None or str @keyword verbose: A flag which if True will cause all chemical shift data loaded to be printed out. @type verbose: bool """ # Test if the current data pipe exists. check_pipe() # Test if sequence data is loaded. if not exists_mol_res_spin_data(): raise RelaxNoSequenceError # Check the file name. if file == None: raise RelaxError("The file name must be supplied.") # Read the peak list data. peak_list = read_peak_list(file=file, dir=dir, 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, sep=sep, spin_id=spin_id) # Loop over the assignments. data = [] data_flag = False for assign in peak_list: # Loop over the dimensions of the peak list. for i in range(peak_list.dimensionality): # Generate the spin_id. spin_id = generate_spin_id_unique(res_num=assign.res_nums[i], spin_name=assign.spin_names[i]) # Get the spin container. spin = return_spin(spin_id=spin_id) if not spin: warn(RelaxNoSpinWarning(spin_id)) continue # Skip deselected spins. if not spin.select: continue # Store the shift. spin.chemical_shift = assign.shifts[i] # Switch the flag. data_flag = True # Append the data for printing out. data.append([spin_id, repr(spin.chemical_shift)]) # No data. if not data_flag: raise RelaxError("No chemical shifts could be loaded from the peak list") # Print out. if verbose: print("\nThe following chemical shifts have been loaded into the relax data store:\n") write_data(out=sys.stdout, headings=["Spin_ID", "Chemical shift"], data=data)