def write_distmatrix_old_format(n, dmat, ssestr): """ Write distance matrix to stdout in format for TableauComparer (Arun) full matrix, number of SSEs on first line and SSE sequence (DSSP codes E,H) on second line. n - order of distance matrix (n by n) dmat - Numeric matrix for distance matrix sse_str - SSE string correspdonding to the distance matrix """ sys.stdout.write(str(len(dmat)) + '\n') sys.stdout.write(ssestr + '\n') for k in range(n): for l in range(n): d = dmat[k,l] if isNaN(d) or k == l: d = -999.0 sys.stdout.write("% 7.1f " % d) sys.stdout.write("\n")
def write_tableau_old_format(n, Omega, ssestr): """ Write tableau to stdout in the original (Arun) TableauCreator format, with angles in degrees, full matrix, number of SSEs on first line and SSE sequence (DSSP codes E,H) on second line. n - order of tableau matrix (n by n) Omega - Numeric matrix for Omega matrix sse_str - SSE string correspdonding to the Omega matrix """ sys.stdout.write(str(len(Omega)) + '\n') sys.stdout.write(ssestr + '\n') for k in range(n): for l in range(n): angle = degrees(Omega[k,l]) if isNaN(angle) or k == l: angle = -999.0 sys.stdout.write("% 7.1f " % angle) sys.stdout.write("\n")
def write_distmatrix_old_format(n, dmat, ssestr): """ Write distance matrix to stdout in format for TableauComparer (Arun) full matrix, number of SSEs on first line and SSE sequence (DSSP codes E,H) on second line. n - order of distance matrix (n by n) dmat - Numeric matrix for distance matrix sse_str - SSE string correspdonding to the distance matrix """ sys.stdout.write(str(len(dmat)) + '\n') sys.stdout.write(ssestr + '\n') for k in range(n): for l in range(n): d = dmat[k, l] if isNaN(d) or k == l: d = -999.0 sys.stdout.write("% 7.1f " % d) sys.stdout.write("\n")
def write_tableau_old_format(n, Omega, ssestr): """ Write tableau to stdout in the original (Arun) TableauCreator format, with angles in degrees, full matrix, number of SSEs on first line and SSE sequence (DSSP codes E,H) on second line. n - order of tableau matrix (n by n) Omega - Numeric matrix for Omega matrix sse_str - SSE string correspdonding to the Omega matrix """ sys.stdout.write(str(len(Omega)) + '\n') sys.stdout.write(ssestr + '\n') for k in range(n): for l in range(n): angle = degrees(Omega[k, l]) if isNaN(angle) or k == l: angle = -999.0 sys.stdout.write("% 7.1f " % angle) sys.stdout.write("\n")
def main(): """ main for convdb2.py - load PTTableauPacked pickle and Numeric.array distance matrix pickle and output as ascii """ use_sidlist = False do_sort = False try: opts, args = getopt.getopt(sys.argv[1:], "ls") except getopt.GetoptError: usage(sys.argv[0]) for opt,arg in opts: if opt == "-l": # read list of identifeirs on stdin use_sidlist = True elif opt == "-s": # sort db by size do_sort = True else: usage(sys.argv[0]) if len(args) != 2: usage(sys.argv[0]) dbfile = args[0] distmatrixdbfile = args[1] if use_sidlist: # make dictionary of identifiers from list on stdin sid_dict = dict([(x.strip(), None) for x in sys.stdin.readlines()]) sys.stderr.write('loading tableaux...\n') db = pickle.load(open(dbfile)) sys.stderr.write('loading distance matrices...\n') distmatrixdb = pickle.load(open(distmatrixdbfile)) sys.stderr.write('writing ASCII format tableaux+distmatrices...\n') first = True count = 0 total_count = 0 dblist = [ (pdbid,dbtablist) for (pdbid,dbtablist) in db.iteritems() if len(dbtablist) > 0] # remove those with no tableaux if do_sort: sys.stderr.write("sorting database...\n") dblist.sort(cmp=sizecmp) for pdbid,dbtablist in dblist: if use_sidlist and not sid_dict.has_key(pdbid): continue tabnum = 0 while tabnum < len(dbtablist): tableau = dbtablist[tabnum] n = len(tableau) name = pdbid if len(dbtablist) > 1: name += str(tabnum) try: distmatrix = distmatrixdb[pdbid][tabnum] except KeyError: sys.stderr.write('ERROR: no distance matrix for id ' + pdbid + ' - skipped\n') tabnum += 1 continue if len(distmatrix) != len(tableau): sys.stderr.write('ERROR: dist matrix order ' + str(len(distmatrix)) + ' but tableau order ' + str(len(tableau)) + ' for id ' + pdbid + ' - skipped\n') tabnum += 1 continue if not first: sys.stdout.write('\n') else: first = False sys.stdout.write('%6s %4d\n' % (name, n)) for i in xrange(n): for j in xrange(i+1): sys.stdout.write(tableau[(i,j)] + ' ') sys.stdout.write('\n') for i in xrange(n): for j in xrange(i+1): if isNaN(distmatrix[i,j]): dist = 0.0 else: dist = distmatrix[i,j] sys.stdout.write('%6.3f ' % dist) sys.stdout.write('\n') total_count += 1 tabnum += 1 count += 1 sys.stderr.write('wrote %d tableaux+distmatrices for %d entries\n' % (total_count, count))
def write_tableau(n, tableau, permutation, use_numeric, fortran_format, build_distance_matrix): """ Write tableau or distance matrix to stdout. n - order of tableau or distance matrix (n by n) tableau - PTTableau object for tableau or Numeric matrix for Omega matrix or Numeric matrix for distance matrix permutation - permuted list of ingeters in interval [0, n-1] to permute the rows+cols of the tableau/matrix by (so [0,1,2,...n-1] for no permutation. use_numeric - boolean. If true, tableau is a Numeric Omega matrix not a tableau. fortran_format - boolean. If True, put in lower triangle format for FORTRAN programs tsrchd etc. build_distance_matrix - boolean. If True is a distance matrix not a tableau or Omega matrix. """ if build_distance_matrix: distmatrix = tableau if fortran_format: for k in range(n): for l in range(k+1): kprime = permutation[k] lprime = permutation[l] if isNaN(distmatrix[kprime,lprime]): dist = 0.0 else: dist = distmatrix[kprime,lprime] if dist > 99.9: sys.stderr.write('WARNING: distance %f at (%d,%d) truncated to 99.9 for fortran format\n' % (dist,kprime,lprime)) dist = 99.9 sys.stdout.write("%6.3f " % dist) sys.stdout.write("\n") else: for k in range(n): for l in range(n): kprime = permutation[k] lprime = permutation[l] sys.stdout.write("% 6.2f " % distmatrix[kprime,lprime]) sys.stdout.write("\n") elif use_numeric: Omega = tableau if fortran_format: for k in range(n): for l in range(k+1): kprime = permutation[k] lprime = permutation[l] if isNaN(Omega[kprime,lprime]): angle = 0.0 else: angle = Omega[kprime,lprime] sys.stdout.write("%6.3f " % angle) sys.stdout.write("\n") else: for k in range(n): for l in range(n): kprime = permutation[k] lprime = permutation[l] sys.stdout.write("% 4.3f " % Omega[kprime,lprime]) sys.stdout.write("\n") else: if fortran_format: for k in range(n): for l in range(k+1): kprime = permutation[k] lprime = permutation[l] sys.stdout.write(tableau[(kprime,lprime)] + " ") sys.stdout.write("\n") else: # can't just sys.stdout.write(str(tableau)) if shuffled... for k in range(n): for l in range(n): kprime = permutation[k] lprime = permutation[l] sys.stdout.write(tableau[(kprime,lprime)] + " ") sys.stdout.write('\n')
def write_tableau(n, tableau, permutation, use_numeric, fortran_format, build_distance_matrix): """ Write tableau or distance matrix to stdout. n - order of tableau or distance matrix (n by n) tableau - PTTableau object for tableau or Numeric matrix for Omega matrix or Numeric matrix for distance matrix permutation - permuted list of ingeters in interval [0, n-1] to permute the rows+cols of the tableau/matrix by (so [0,1,2,...n-1] for no permutation. use_numeric - boolean. If true, tableau is a Numeric Omega matrix not a tableau. fortran_format - boolean. If True, put in lower triangle format for FORTRAN programs tsrchd etc. build_distance_matrix - boolean. If True is a distance matrix not a tableau or Omega matrix. """ if build_distance_matrix: distmatrix = tableau if fortran_format: for k in range(n): for l in range(k + 1): kprime = permutation[k] lprime = permutation[l] if isNaN(distmatrix[kprime, lprime]): dist = 0.0 else: dist = distmatrix[kprime, lprime] if dist > 99.9: sys.stderr.write( 'WARNING: distance %f at (%d,%d) truncated to 99.9 for fortran format\n' % (dist, kprime, lprime)) dist = 99.9 sys.stdout.write("%6.3f " % dist) sys.stdout.write("\n") else: for k in range(n): for l in range(n): kprime = permutation[k] lprime = permutation[l] sys.stdout.write("% 6.2f " % distmatrix[kprime, lprime]) sys.stdout.write("\n") elif use_numeric: Omega = tableau if fortran_format: for k in range(n): for l in range(k + 1): kprime = permutation[k] lprime = permutation[l] if isNaN(Omega[kprime, lprime]): angle = 0.0 else: angle = Omega[kprime, lprime] sys.stdout.write("%6.3f " % angle) sys.stdout.write("\n") else: for k in range(n): for l in range(n): kprime = permutation[k] lprime = permutation[l] sys.stdout.write("% 4.3f " % Omega[kprime, lprime]) sys.stdout.write("\n") else: if fortran_format: for k in range(n): for l in range(k + 1): kprime = permutation[k] lprime = permutation[l] sys.stdout.write(tableau[(kprime, lprime)] + " ") sys.stdout.write("\n") else: # can't just sys.stdout.write(str(tableau)) if shuffled... for k in range(n): for l in range(n): kprime = permutation[k] lprime = permutation[l] sys.stdout.write(tableau[(kprime, lprime)] + " ") sys.stdout.write('\n')