Example #1
0
 def __init__(self, edge, use_lengths=True):
     children = [type(self)(child) for child in edge.Children]
     TreeNode.__init__(self, Params=edge.params.copy(), Children=children, 
         Name=("" if children else edge.Name))
     self.Length = edge.Length
     self.original = edge  # for edge_color_callback
     self.Collapsed = False
     self.use_lengths_default = use_lengths
Example #2
0
 def __init__(self, edge, use_lengths=True):
     children = [type(self)(child) for child in edge.Children]
     TreeNode.__init__(self, Params=edge.params.copy(), Children=children, 
         Name=("" if children else edge.Name))
     self.Length = edge.Length
     self.original = edge  # for edge_color_callback
     self.Collapsed = False
     self.use_lengths_default = use_lengths
Example #3
0
def make_consensus_tree(cons_split, check_for_rank=True, tips=None):
    """Returns a mapping by rank for names to their parent names and counts"""
    god_node = TreeNode(Name=None)
    god_node.Rank = None
    
    base = cons_split[0]
    cur_node = god_node

    # create a base path in the tree 
    for rank, name in enumerate(base):
        new_node = TreeNode(Name=name)
        new_node.Rank = rank
        cur_node.append(new_node)
        cur_node = new_node

    # setup the initial childlookup structure so taht we don't have to
    # always iterate over .Children
    for n in god_node.traverse(include_self=True):
        if n.istip():
            n.ChildLookup = {}
            continue
        n.ChildLookup = {n.Children[0].Name:n.Children[0]}

    # for every consensus string, start at the "god" node
    for idx,con in enumerate(cons_split):
        cur_node = god_node

        # for each name, see if we've seen it, if not, add that puppy on
        for rank, name in enumerate(con):
            if name in cur_node.ChildLookup:
                cur_node = cur_node.ChildLookup[name]
            else:
                #print "adding to %s to %s" % (name, cur_node.Name)
                new_node = TreeNode(Name=name)
                new_node.Rank = rank
                new_node.ChildLookup = {}
                cur_node.append(new_node)
                cur_node.ChildLookup[name] = new_node
                cur_node = new_node
        
        if tips is not None:
            cur_node.append(TreeNode(Name=tips[idx]))

    # build an assist lookup dict
    lookup = {}
    for node in god_node.traverse():
        if node.Name is None:
            continue
        if check_for_rank and '__' in node.Name and \
                node.Name.split('__')[1] == '':
            continue
        lookup[node.Name] = node

    return god_node, lookup
Example #4
0
def mergetree(left, right, working_dir):
    """Reconstruct a tree from merge order"""
    # decorate and infer filenames for tips
    global INTERNAL_COUNT

    if not isinstance(left, TreeNode):
        filepath = str(left[0])
        name = basename(filepath.split('.')[0])
        left = TreeNode(Name=name)
        left.FilePath = filepath
        left.Processed = False
        left.PollPath = None  # doesn't make sense for tips
        left.FullCommand = None
        left.EndTime = None
        left.StartTime = None
        left.TotalTime = None

    if not isinstance(right, TreeNode):
        filepath = str(right[0])
        name = basename(filepath.split('.')[0])
        right = TreeNode(Name=name)
        right.FilePath = filepath
        right.Processed = False
        right.PollPath = None  # doesn't make sense for tips
        right.FullCommand = None
        right.EndTime = None
        right.StartTime = None
        right.TotalTime = None

    # internal node
    name = str(INTERNAL_COUNT)
    filepath = join(working_dir, name) + '.biom'
    merged = TreeNode(Name=name, Children=[left, right])
    merged.FilePath = filepath
    merged.Processed = False
    merged.PollPath = filepath + '.poll'
    merged.FullCommand = None
    merged.EndTime = None
    merged.StartTime = None
    merged.TotalTime = None

    INTERNAL_COUNT += 1
    return merged
Example #5
0
def mergetree(left, right, working_dir):
    """Reconstruct a tree from merge order"""
    # decorate and infer filenames for tips
    global INTERNAL_COUNT

    if not isinstance(left, TreeNode):
        filepath = str(left[0])
        name = basename(filepath.split('.')[0])
        left = TreeNode(Name=name)
        left.FilePath = filepath
        left.Processed = False
        left.PollPath = None  # doesn't make sense for tips
        left.FullCommand = None
        left.EndTime = None
        left.StartTime = None
        left.TotalTime = None

    if not isinstance(right, TreeNode):
        filepath = str(right[0])
        name = basename(filepath.split('.')[0])
        right = TreeNode(Name=name)
        right.FilePath = filepath
        right.Processed = False
        right.PollPath = None  # doesn't make sense for tips
        right.FullCommand = None
        right.EndTime = None
        right.StartTime = None
        right.TotalTime = None

    # internal node
    name = str(INTERNAL_COUNT)
    filepath = join(working_dir, name) + '.biom'
    merged = TreeNode(Name=name, Children=[left, right])
    merged.FilePath = filepath
    merged.Processed = False
    merged.PollPath = filepath + '.poll'
    merged.FullCommand = None
    merged.EndTime = None
    merged.StartTime = None
    merged.TotalTime = None

    INTERNAL_COUNT += 1
    return merged