Esempio n. 1
0
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")
Esempio n. 2
0
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")
Esempio n. 3
0
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")
Esempio n. 4
0
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")
Esempio n. 5
0
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))
Esempio n. 6
0
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')
Esempio n. 7
0
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')