def compare_sequence(pipe1=None, pipe2=None, fail=True): """Compare the sequence in two data pipes. @keyword pipe1: The name of the first data pipe. @type pipe1: str @keyword pipe2: The name of the second data pipe. @type pipe2: str @keyword fail: A flag which if True causes a RelaxError to be raised. @type fail: bool @return: 1 if the sequence is the same, 0 if different. @rtype: int @raises RelaxError: If the sequence is different and the fail flag is True. """ # Failure status. status = 1 # Molecule number. if count_molecules(pipe=pipe1) != count_molecules(pipe=pipe2): status = 0 if fail: raise RelaxDiffMolNumError(pipe1, pipe2) # Residue number. if count_residues(pipe=pipe1) != count_residues(pipe=pipe2): status = 0 if fail: raise RelaxDiffResNumError(pipe1, pipe2) # Spin number. if count_spins(pipe=pipe1) != count_spins(pipe=pipe2): status = 0 if fail: raise RelaxDiffSpinNumError(pipe1, pipe2) # Create a string representation of the 2 sequences. seq1 = '' seq2 = '' for spin, spin_id in spin_loop(return_id=True, pipe=pipe1): seq1 = seq1 + spin_id + '\n' for spin, spin_id in spin_loop(return_id=True, pipe=pipe2): seq2 = seq2 + spin_id + '\n' # Sequence check. if seq1 != seq2: status = 0 if fail: raise RelaxDiffSeqError(pipe1, pipe2) # Return the status. return status
def determine_seq_type(spin_id=None): """Determine the spin sequence data type. The purpose is to identify systems whereby only spins or only residues exist. @keyword spin_id: The spin identification string. @type spin_id: str @return: The spin sequence data type. This can be one of 'spin', 'res,' or 'mixed'. @rtype: str """ # Count the molecules, residues, and spins. num_mol = count_molecules(spin_id) num_res = count_residues(spin_id) num_spin = count_spins(spin_id) # Only residues. if num_mol == 1 and num_spin == 1: return 'res' # Only spins. if num_mol == 1 and num_res == 1: return 'spin' # Mixed. return 'mixed'