seqA   MAEIPDETIQ QFMALT---H NIAVQYLSEF GDLNEALNSY YASQTDDIKD RREEAHQFMA
      seqB   MAEIPDATIQ QFMALTNVSH NIAVQY--EF GDLNEALNSY YAYQTDDQKD RREEAHQFMA
      seqC   MAEIPDATIQ ---ALTNVSH NIAVQYLSEF GDLNEALNSY YASQTDDQPD RREEAHQFMA
      seqD   MAEAPDETIQ QFMALTNVSH NIAVQYLSEF GDLNEAL--- ---------- -REEAHQ---
             LTNVSHQFMA LTNVSH
             LTNVSH---- ------
             LTNVSH---- ------
             -------FMA LTNVSH
"""
# Load a tree and link it to an alignment. As usual, 'alignment' can
# be the path to a file or data in text format.
t = PhyloTree("(((seqA,seqB),seqC),seqD);", alignment=fasta_txt, alg_format="fasta")

#We can now access the sequence of every leaf node
print "These are the nodes and its sequences:"
for leaf in t.iter_leaves():
    print leaf.name, leaf.sequence
#seqD MAEAPDETIQQFMALTNVSHNIAVQYLSEFGDLNEAL--------------REEAH
#seqC MAEIPDATIQ---ALTNVSHNIAVQYLSEFGDLNEALNSYYASQTDDQPDRREEAH
#seqA MAEIPDETIQQFMALT---HNIAVQYLSEFGDLNEALNSYYASQTDDIKDRREEAH
#seqB MAEIPDATIQQFMALTNVSHNIAVQY--EFGDLNEALNSYYAYQTDDQKDRREEAH
#
# The associated alignment can be changed at any time
t.link_to_alignment(alignment=iphylip_txt, alg_format="iphylip")
# Let's check that sequences have changed
print "These are the nodes and its re-linked sequences:"
for leaf in t.iter_leaves():
    print leaf.name, leaf.sequence
#seqD MAEAPDETIQQFMALTNVSHNIAVQYLSEFGDLNEAL--------------REEAHQ----------FMALTNVSH
#seqC MAEIPDATIQ---ALTNVSHNIAVQYLSEFGDLNEALNSYYASQTDDQPDRREEAHQFMALTNVSH----------
#seqA MAEIPDETIQQFMALT---HNIAVQYLSEFGDLNEALNSYYASQTDDIKDRREEAHQFMALTNVSHQFMALTNVSH
            score = name2score.get(name, "Exact:1.0")
            print "\t".join(
                map(str,
                    [score, name, realname.capitalize(), taxid]))

    if args.taxid_file:
        all_taxids.extend(
            map(strip,
                open(args.taxid_file, "rU").read().split("\n")))
    if args.taxid:
        all_taxids.extend(args.taxid)

    reftree = None
    if args.reftree:
        reftree = PhyloTree(args.reftree)
        all_taxids.extend(list(set([n.name for n in reftree.iter_leaves()])))

    if all_taxids and args.info:
        log.info("Dumping %d taxid translations:" % len(all_taxids))
        all_taxids = set(all_taxids)
        all_taxids.discard("")
        translator = get_taxid_translator(all_taxids)
        for taxid, name in translator.iteritems():
            lineage = get_sp_lineage(taxid)
            named_lineage = ','.join(translate_to_names(lineage))
            lineage = ','.join(map(str, lineage))
            print "\t".join(map(str, [taxid, name, named_lineage, lineage]))
        for notfound in all_taxids - set(
                str(k) for k in translator.iterkeys()):
            print >> sys.stderr, notfound, "NOT FOUND"
                 
     for name in all_names:
         taxid = name2id.get(name, "???")
         realname = name2realname.get(name, name)
         score = name2score.get(name, "Exact:1.0")
         print "\t".join(map(str, [score, name, realname.capitalize(), taxid]))
         
 if args.taxid_file:
     all_taxids.extend(map(strip, open(args.taxid_file, "rU").read().split("\n")))
 if args.taxid:
     all_taxids.extend(args.taxid)
     
 reftree = None
 if args.reftree:
     reftree = PhyloTree(args.reftree)
     all_taxids.extend(list(set([n.name for n in reftree.iter_leaves()])))
             
 if all_taxids and args.info:
     log.info("Dumping %d taxid translations:" %len(all_taxids))
     all_taxids = set(all_taxids)
     all_taxids.discard("")
     translator = get_taxid_translator(all_taxids)
     for taxid, name in translator.iteritems():
         lineage = get_sp_lineage(taxid)
         named_lineage = ','.join(translate_to_names(lineage))
         lineage = ','.join(map(str, lineage))
         print "\t".join(map(str, [taxid, name, named_lineage, lineage ]))
     for notfound in all_taxids - set(str(k) for k in translator.iterkeys()):
         print >>sys.stderr, notfound, "NOT FOUND"
         
 if all_taxids and args.taxonomy: