コード例 #1
0
ファイル: matrixlib.py プロジェクト: mdrasmus/summon
def ilmat2imat(ilmat, rowlabels, collabels):
    """
    Converts labeled matrix iterator (ilmat) to indexed matrix iterator (imat)
    """

    rowlookup = util.list2lookup(rowlabels)
    collookup = util.list2lookup(collabels)

    for r, c, v in ilmat:
        yield rowlookup[r], collookup[c], v
コード例 #2
0
ファイル: paml.py プロジェクト: ongkong/compbio
def renameTreeAlign(tree, align):
    """Rename the ancestral nodes of a tree"""

    # rename leaves
    for leaf in tree.leaves():
        tree.rename(leaf.name, align.keys()[int(leaf.name) - 1])

    names = align.keys()
    name_lookup = util.list2lookup(names)
    lookup = dict(align)
    align.clear()
    order = {}

    # rename ancestral nodes by preorder
    next = [1]

    def walk(node):
        oldname = node.name
        if not node.is_leaf():
            tree.rename(node.name, next[0])
            next[0] += 1
            align[str(node.name)] = lookup[str(oldname)]
            order[str(node.name)] = name_lookup[str(oldname)]
        else:
            align[node.name] = lookup[node.name]
            order[node.name] = name_lookup[node.name]
        for child in node.children:
            walk(child)

    walk(tree.root)

    align.names.sort(key=lambda x: order[x])
コード例 #3
0
    def map(self, func, headers=None):
        """Returns a new table with each row mapped by function 'func'"""

        if len(self) == 0:
            # handle case of zero length table
            return self.new()

        # determine what table will look like from first row
        first_row = func(self[0])

        # determine headers of new table
        if headers is None:
            # try order new headers the same way as old headers
            headers = first_row.keys()
            lookup = util.list2lookup(self.headers)
            top = len(headers)
            headers.sort(key=lambda x: (lookup.get(x, top), x))

        tab = type(self)(itertools.chain([first_row],
                                         (func(x) for x in self[1:])),
                         headers=headers)
        tab.delim = self.delim
        tab.nheaders = self.nheaders

        return tab
コード例 #4
0
def rename_tree_with_ids(tree, labels):
    lookup = util.list2lookup(labels)

    names = tree.nodes.keys()
    for name in names:
        if tree.nodes[name].is_leaf():
            tree.rename(name, phylip_padding(str(lookup[name])))
コード例 #5
0
ファイル: tablelib.py プロジェクト: sarab609/scraps
    def map(self, func, headers=None):
        """Returns a new table with each row mapped by function 'func'"""

        if len(self) == 0:
            # handle case of zero length table
            return self.new()

        # determine what table will look like from first row
        first_row = func(self[0])

        # determine headers of new table
        if headers is None:
            # try order new headers the same way as old headers
            headers = first_row.keys()
            lookup = util.list2lookup(self.headers)
            top = len(headers)            
            headers.sort(key=lambda x:
                         (lookup.get(x, top), x))
            
        
        tab = type(self)(
            itertools.chain([first_row],
                            (func(x) for x in self[1:])),
            headers=headers)
        tab.delim = self.delim
        tab.nheaders = self.nheaders
        
        return tab
コード例 #6
0
def renameTreeAlign(tree, align):
    """Rename the ancestral nodes of a tree"""

    # rename leaves
    for leaf in tree.leaves():
        tree.rename(leaf.name, align.keys()[int(leaf.name)-1])

    names = align.keys()
    name_lookup = util.list2lookup(names)
    lookup = dict(align)
    align.clear()
    order = {}

    # rename ancestral nodes by preorder
    next = [1]
    def walk(node):
        oldname = node.name
        if not node.is_leaf():
            tree.rename(node.name, next[0])
            next[0] += 1
            align[str(node.name)] = lookup[str(oldname)]
            order[str(node.name)] = name_lookup[str(oldname)]
        else:
            align[node.name] = lookup[node.name]
            order[node.name] = name_lookup[node.name]
        for child in node.children:
            walk(child)
    walk(tree.root)

    align.names.sort(key=lambda x: order[x])
コード例 #7
0
def rename_tree_with_ids(tree, labels):
    lookup = util.list2lookup(labels)
    
    names = tree.nodes.keys()
    for name in names:
        if tree.nodes[name].is_leaf():
            tree.rename(name, phylip_padding(str(lookup[name])))
コード例 #8
0
ファイル: cluster.py プロジェクト: ongkong/compbio
def parts2partids(parts, labels):
    lookup = util.list2lookup(labels)
    partids = [0] * len(labels)

    for i in xrange(len(parts)):
        for item in parts[i]:
            partids[lookup[item]] = i

    return partids
コード例 #9
0
def parts2partids(parts, labels):
    lookup = util.list2lookup(labels)
    partids = [0] * len(labels)

    for i in xrange(len(parts)):
        for item in parts[i]:
            partids[lookup[item]] = i

    return partids
コード例 #10
0
    def init_distmats(self):
        """Initialize distance matrices
        
           Initialization should by done after trees and alignments
        """

        if len(self.distmats) > 0:
            self.matrices = []

            # setup matrices
            for i, distmat in enumerate(self.distmats):
                # convert distmatrix to summon Matrix
                if isinstance(distmat, matrix.Matrix):
                    mat = distmat
                else:
                    mat = matrix.Matrix()
                    mat.from2DList(distmat)

                # set default colormap
                if mat.colormap == None:
                    mat.colormap = self.matrix_colormap

                # determine labels
                if self.dist_labels_from_align and self.align_order != None:
                    # determine row/col labels from alignment if it exists
                    mat.rowlabels = self.align_order
                    mat.collabels = self.align_order

                elif self.distlabels != None:
                    mat.rowlabels = self.distlabels[i]
                    mat.collabels = self.distlabels[i]

                else:
                    raise Exception("no labels given for matrix")

                # reorder according to any given tree
                if self.order != None:
                    lookup = util.list2lookup(mat.rowlabels)
                    mat.rperm = util.mget(lookup, self.order)
                    mat.cperm = util.mget(lookup, self.order)

                mat.setup()

                self.matrices.append(mat)

            if self.seqs == None:
                seqs = self.current_align
            else:
                seqs = self.seqs

            # create matrix vis
            self.current_matrix = self.matrices[0]
            self.visdist = distmatrixvis.DistMatrixViewer(self.current_matrix,
                                                          seqs=seqs,
                                                          bgcolor=(1, 1, 1))
        else:
            self.visdist = None
コード例 #11
0
    def init_distmats(self):
        """Initialize distance matrices
        
           Initialization should by done after trees and alignments
        """
    
        if len(self.distmats) > 0:
            self.matrices = []
            
            # setup matrices            
            for i, distmat in enumerate(self.distmats):
                # convert distmatrix to summon Matrix
                if isinstance(distmat, matrix.Matrix):
                    mat = distmat
                else:
                    mat = matrix.Matrix()
                    mat.from2DList(distmat)            

                # set default colormap
                if mat.colormap == None:
                    mat.colormap = self.matrix_colormap
                
                # determine labels
                if self.dist_labels_from_align and self.align_order != None:
                    # determine row/col labels from alignment if it exists
                    mat.rowlabels = self.align_order
                    mat.collabels = self.align_order
                
                elif self.distlabels != None:
                    mat.rowlabels = self.distlabels[i]
                    mat.collabels = self.distlabels[i]
                    
                else:
                    raise Exception("no labels given for matrix")
                
                # reorder according to any given tree
                if self.order != None:
                    lookup = util.list2lookup(mat.rowlabels)
                    mat.rperm = util.mget(lookup, self.order)
                    mat.cperm = util.mget(lookup, self.order)
                
                mat.setup()

                self.matrices.append(mat)
        
            if self.seqs == None:
                seqs = self.current_align
            else:
                seqs = self.seqs
            
            # create matrix vis
            self.current_matrix = self.matrices[0]
            self.visdist = distmatrixvis.DistMatrixViewer(self.current_matrix, 
                                                          seqs=seqs, 
                                                          bgcolor=(1,1,1))
        else:
            self.visdist = None
コード例 #12
0
 def show_selection(self):
     # sort genes by order in matrix
     genes = list(self.selgenes)
     lookup = util.list2lookup(self.mat.rowlabels)
     genes.sort(key=lambda x: lookup[x])
     
     print
     print "selected genes:"
     for i, gene in enumerate(genes):
         print "%3d %s" % (i+1, gene)
コード例 #13
0
    def show_selection(self):
        # sort genes by order in matrix
        genes = list(self.selgenes)
        lookup = util.list2lookup(self.mat.rowlabels)
        genes.sort(key=lambda x: lookup[x])

        print
        print "selected genes:"
        for i, gene in enumerate(genes):
            print "%3d %s" % (i + 1, gene)
コード例 #14
0
ファイル: phylo.py プロジェクト: sarab609/scraps
def splitString(split, leaves=None, leafDelim=" ", splitDelim="|"):
    """
    Returns a string representing a split

    If leaves are specified, leaf names will be displayed in that order.
    """

    if leaves is not None:
        lookup = util.list2lookup(leaves)
        split = (sorted(split[0], key=lambda x: lookup[x]),
                 sorted(split[0], key=lambda x: lookup[x]))

    return leafDelim.join(split[0]) + splitDelim + leafDelim.join(split[1])
コード例 #15
0
    def on_reorder_leaves(self):
        leaves = self.current_tree.leaf_names()

        # reorder matrix
        for mat in self.matrices:
            lookup = util.list2lookup(mat.rowlabels)
            mat.rperm = util.mget(lookup, leaves)
            mat.cperm = util.mget(lookup, leaves)
            mat.setup()
        if self.visdist:
            self.visdist.redraw()

        # reorder alignment
        for aln in self.aligns:
            aln.names = leaves
        if self.visalign:
            self.visalign.show()
コード例 #16
0
 def show_align(self):
     if self.seqs == None:
         print "cannot build alignment: no sequences are loaded"
         return
     
     if len(self.selgenes) == 0:
         print "cannot build alignment: no sequences selected"
         return
     
     genes = list(self.selgenes)
     lookup = util.list2lookup(self.mat.rowlabels)
        
     self.aln = muscle.muscle(self.seqs.get(genes))
     self.aln.names.sort(key=lambda x: lookup[x])
     
     self.visaln = genomebrowser.show_align(self.aln)
     self.visaln.win.set_name("alignment")
コード例 #17
0
    def show_align(self):
        if self.seqs is None:
            print "cannot build alignment: no sequences are loaded"
            return

        if len(self.selgenes) == 0:
            print "cannot build alignment: no sequences selected"
            return

        genes = list(self.selgenes)
        lookup = util.list2lookup(self.mat.rowlabels)

        self.aln = muscle.muscle(self.seqs.get(genes))
        self.aln.names.sort(key=lambda x: lookup[x])

        self.visaln = genomebrowser.show_align(self.aln)
        self.visaln.win.set_name("alignment")
コード例 #18
0
 def on_reorder_leaves(self):
     leaves = self.current_tree.leaf_names()
     
     # reorder matrix
     for mat in self.matrices:
         lookup = util.list2lookup(mat.rowlabels)
         mat.rperm = util.mget(lookup, leaves)
         mat.cperm = util.mget(lookup, leaves)
         mat.setup()
     if self.visdist:
         self.visdist.redraw()
     
     
     # reorder alignment
     for aln in self.aligns:
         aln.names = leaves
     if self.visalign:
         self.visalign.show()
コード例 #19
0
def layout_arg(arg, leaves=None, yfunc=lambda x: x):
    """Layout the nodes of an ARG"""

    layout = {}

    # layout leaves
    if leaves is None:
        leafx = layout_arg_leaves(arg)
    else:
        leafx = util.list2lookup(leaves)

    for node in arg.postorder():
        if node.is_leaf():
            layout[node] = [leafx[node], yfunc(node.age)]
        else:
            layout[node] = [
                stats.mean(layout[child][0] for child in node.children),
                yfunc(node.age)]

    return layout
コード例 #20
0
def layout_arg(arg, leaves=None, yfunc=lambda x: x):
    """Layout the nodes of an ARG"""

    layout = {}

    # layout leaves
    if leaves is None:
        leafx = layout_arg_leaves(arg)
    else:
        leafx = util.list2lookup(leaves)

    for node in arg.postorder():
        if node.is_leaf():
            layout[node] = [leafx[node], yfunc(node.age)]
        else:
            layout[node] = [
                stats.mean(layout[child][0] for child in node.children),
                yfunc(node.age)]

    return layout
コード例 #21
0
ファイル: __init__.py プロジェクト: sarab609/scraps
def makePtree(tree):
    """Make parent tree array from tree"""
    
    nodes = []
    nodelookup = {}
    ptree = []
    
    def walk(node):
        for child in node.children:
            walk(child)
        nodes.append(node)
    walk(tree.root)
    
    def leafsort(a, b):
        if a.isLeaf():
            if b.isLeaf():
                return 0
            else:
                return -1
        else:
            if b.isLeaf():
                return 1
            else:
                return 0
    
    # bring leaves to front
    nodes.sort(cmp=leafsort)
    nodelookup = util.list2lookup(nodes)
    
    for node in nodes:
        if node == tree.root:
            ptree.append(-1)
        else:
            ptree.append(nodelookup[node.parent])
    
    assert nodes[-1] == tree.root
    
    return ptree, nodes, nodelookup
コード例 #22
0
ファイル: phylo.py プロジェクト: sarab609/scraps
def makeTopologyMatrix(tree, genes):

    # find how edges split vertices
    network = treelib.tree2graph(tree)
    splits = find_all_branch_splits(network, set(genes))
    edges = splits.keys()

    # create topology matrix
    n = len(genes) 
    ndists = n*(n-1) / 2
    topmat = util.makeMatrix(ndists, len(edges))
    
    vlookup = util.list2lookup(genes)
    n = len(genes)
    for e in xrange(len(edges)):
        set1, set2 = splits[edges[e]]
        for gene1 in set1:
            for gene2 in set2:
                i, j = util.sort([vlookup[gene1], vlookup[gene2]])
                index = i*n-i*(i+1)/2+j-i-1
                topmat[index][e] = 1.0
    
    return topmat, edges
コード例 #23
0
ファイル: seqlib.py プロジェクト: sarab609/scraps
 def order_names(self, aln):
     """Orders the names in the same order they appear in aln"""
     
     lookup = util.list2lookup(aln.keys())
     self.names.sort(key=lambda x: lookup[x])
コード例 #24
0
ファイル: seqlib.py プロジェクト: xysheep/compbio
    def order_names(self, aln):
        """Orders the names in the same order they appear in aln"""

        lookup = util.list2lookup(aln.keys())
        self.names.sort(key=lambda x: lookup[x])