def run(args): from ete2 import Tree, PhyloTree for nw in args.src_tree_iterator: if args.orthologs is not None: t = PhyloTree(nw) for e in t.get_descendant_evol_events(): print e.in_seqs, e.out_seqs
# get tree files from directory tree_files = os.listdir(str(sys.argv[1])) for tree in tree_files: if re.match(r"^\d+\.fna\.aln.+\.tree", tree): # get orthogroup id ortho = re.sub(r'\D', "", tree) # load newick tree #print(tree) t = PhyloTree(tree) #print(t) evts = file('%s' '/' '%s' '.temp' % (events_dir, tree), "w") ########################################################################################## # evolutionary events involving all taxa ########################################################################################## # Alternatively, you can scan the whole tree topology events = t.get_descendant_evol_events() # print its orthology and paralogy relationships for ev in events: if ev.etype == "S": evts.write(",".join(ev.in_seqs)) evts.write("<===>") evts.write(",".join(ev.out_seqs)) evts.write("\n") elif ev.etype == "D": evts.write(",".join(ev.in_seqs)) evts.write("<===>") evts.write(",".join(ev.out_seqs)) evts.write("\n") evts.close() ########################################################################################## # Get support value for the evolutionary events
# To obtain all the evolutionary events involving a given leaf node we # use get_my_evol_events method matches = t.search_nodes(name="Hsa_001") human_seq = matches[0] # Obtains its evolutionary events events = human_seq.get_my_evol_events() # Print its orthology and paralogy relationships print "Events detected that involve Hsa_001:" for ev in events: if ev.etype == "S": print ' ORTHOLOGY RELATIONSHIP:', ','.join(ev.in_seqs), "<====>", ','.join(ev.out_seqs) elif ev.etype == "D": print ' PARALOGY RELATIONSHIP:', ','.join(ev.in_seqs), "<====>", ','.join(ev.out_seqs) # Alternatively, you can scan the whole tree topology events = t.get_descendant_evol_events() # Print its orthology and paralogy relationships print "Events detected from the root of the tree" for ev in events: if ev.etype == "S": print ' ORTHOLOGY RELATIONSHIP:', ','.join(ev.in_seqs), "<====>", ','.join(ev.out_seqs) elif ev.etype == "D": print ' PARALOGY RELATIONSHIP:', ','.join(ev.in_seqs), "<====>", ','.join(ev.out_seqs) # If we are only interested in the orthology and paralogy relationship # among a given set of species, we can filter the list of sequences # # fseqs is a function that, given a list of sequences, returns only # those from human and mouse fseqs = lambda slist: [s for s in slist if s.startswith("Hsa") or s.startswith("Mms")] print "Paralogy relationships among human and mouse"