Example #1
0
def main(argv):
    print "AnnotateTreeCmd v1.0"
    if len(argv) == 2 and argv[1] == '-t':
        conduct_tests()
        exit(0)
    elif len(argv) != 7:
            print 'usage python AnnotateTreeCmd.py seqnumfile seqfile treefile cdrfile tag wd.'
            sys.exit(0)

    for file in argv[1:4]:
        check_file(file)
        
    (seqnumfile, seqfile, treefile, cdrfile, tag, wdir) = argv[1:7]

    if len(cdrfile) > 0:
        check_file(cdrfile)
    else:
        cdrfile = None

    try:
        if not os.path.exists(wdir):
            os.makedirs(wdir)
    except:
        print "Error creating directory %s." % wdir
        sys.exit(0)
        
    try:
        msa = Alignment()
        msa.read_nt(seqfile)    # Check that the sequence comprises a valid set of codons
        for seq in msa:
            if '*' in seq:
                print "Stop codon found in sequence %s." % seq.id
                sys.exit(0)
    except:
        print "Error parsing %s: %s." % (seqfile, sys.exc_info()[1])
        sys.exit(0)
        
    try:
        seq_pos = msa.read_position_numbers(seqnumfile)
    except:
            print "Error parsing %s: %s." % (seqnumfile, sys.exc_info()[1])
            sys.exit(0)        

    if cdrfile is not None:
        try:
            acdr = AnalyseCDR(msa, file_name=cdrfile)
        except:
            print "Error parsing %s: %s." % (cdrfile, sys.exc_info()[1])
            sys.exit(0)

    try:
        seq_align = AlignIO.read(seqfile, "fasta")
    except:
        try:
            seq_align = AlignIO.read(seqfile, "phylip")
        except:
            print "Error parsing %s: %s." % (seqfile, sys.exc_info()[1])
            sys.exit(0)

    try:
        tree = Phylo.read(treefile, "newick")
    except:
        print "Error parsing %s: %s." % (treefile, sys.exc_info()[1])
        sys.exit(0)

    dnaml = Dnaml()
    
    int_aas = dnaml.run_dnaml(seq_align, tree, seq_pos, cdrfile, wdir, report, tag)

    if int_aas is not None:
        try:
            if cdrfile is not None:
                acdr = AnalyseCDR(int_aas, file_name=cdrfile)
                cdr_output = acdr.analyse()
                fo = open(wdir + "/" + tag + "cdr_analysis.html", "w")
                fo.write(cdr_output)
                fo.close()
        except:
            print "Warning: CDRs were not analysed: " + str(sys.exc_info()[1])

        try:
            gc.collect()
            RenderTree.render_annotate(wdir + "/" + tag + "annotated_treefile.new", wdir + "/" + tag + "annotated_treefile.png")
            gc.collect()
            RenderTree.render_annotate(wdir + "/" + tag + "annotated_treefile.new", wdir + "/" + tag + "annotated_treefile.svg")
            gc.collect()
            if cdrfile is not None:
                RenderTree.render_annotate(wdir + "/" + tag + "annotated_treefile_sum.new", wdir + "/" + tag + "annotated_treefile_sum.png")
                gc.collect()
                RenderTree.render_annotate(wdir + "/" + tag + "annotated_treefile_sum.new", wdir + "/" + tag + "annotated_treefile_sum.svg")
                gc.collect()
            RenderTree.render_annotate(wdir + "/" + tag + "annotated_treefile_tot.new", wdir + "/" + tag + "annotated_treefile_tot.png")
            gc.collect()
            RenderTree.render_annotate(wdir + "/" + tag + "annotated_treefile_tot.new", wdir + "/" + tag + "annotated_treefile_tot.svg")
            gc.collect()
            RenderTree.render_annotate(wdir + "/" + tag + "intermediates_treefile.new", wdir + "/" + tag + "intermediates_treefile.png")
            gc.collect()
            RenderTree.render_annotate(wdir + "/" + tag + "intermediates_treefile.new", wdir + "/" + tag + "intermediates_treefile.svg")
            gc.collect()
        except:
            print "Error rendering trees: " + str(sys.exc_info()[1])

        first = True
        orig_recs = []
        for rec in SeqIO.parse(wdir + "/" + tag + "aa_alignment.fa", "fasta"):
            if not first and "node_" not in rec.id:
                orig_recs.append(rec)
            first = False
        
        logo_alignment_file = wdir + "/" + tag + "alignment_for_logo.fa"
        SeqIO.write(orig_recs, wdir + "/" + tag + "alignment_for_logo.fa", "fasta")
        
        with open(wdir + "/" + tag + "weblogo_status.txt", "w") as fo:
            retcode = subprocess.call("seqlogo -f %salignment_for_logo.fa -F PNG -o aa_logo -h 2 -w 20 -acS" % tag, cwd=wdir, shell=True, stdout=fo, stderr=subprocess.STDOUT)
            if retcode == 1:
                fo.write("Trying seqlogo.pl instead.\n")
                retcode = subprocess.call("seqlogo.pl -f %salignment_for_logo.fa -F PNG -o aa_logo -h 2 -w 20 -acS" % tag, cwd=wdir, shell=True, stdout=fo, stderr=subprocess.STDOUT)
            if retcode == 1:
                print "Weblogo not installed: logo plot will not be generated."
Example #2
0
def main(argv):
    print "AnnotateTreeCmd v1.0"
    if len(argv) == 2 and argv[1] == '-t':
        conduct_tests()
        exit(0)
    elif len(argv) != 7:
        print 'usage python AnnotateTreeCmd.py seqnumfile seqfile treefile cdrfile tag wd.'
        sys.exit(0)

    for file in argv[1:4]:
        check_file(file)

    (seqnumfile, seqfile, treefile, cdrfile, tag, wdir) = argv[1:7]

    if len(cdrfile) > 0:
        check_file(cdrfile)
    else:
        cdrfile = None

    try:
        if not os.path.exists(wdir):
            os.makedirs(wdir)
    except:
        print "Error creating directory %s." % wdir
        sys.exit(0)

    try:
        msa = Alignment()
        msa.read_nt(
            seqfile)  # Check that the sequence comprises a valid set of codons
        for seq in msa:
            if '*' in seq:
                print "Stop codon found in sequence %s." % seq.id
                sys.exit(0)
    except:
        print "Error parsing %s: %s." % (seqfile, sys.exc_info()[1])
        sys.exit(0)

    try:
        seq_pos = msa.read_position_numbers(seqnumfile)
    except:
        print "Error parsing %s: %s." % (seqnumfile, sys.exc_info()[1])
        sys.exit(0)

    if cdrfile is not None:
        try:
            acdr = AnalyseCDR(msa, file_name=cdrfile)
        except:
            print "Error parsing %s: %s." % (cdrfile, sys.exc_info()[1])
            sys.exit(0)

    try:
        seq_align = AlignIO.read(seqfile, "fasta")
    except:
        try:
            seq_align = AlignIO.read(seqfile, "phylip")
        except:
            print "Error parsing %s: %s." % (seqfile, sys.exc_info()[1])
            sys.exit(0)

    try:
        tree = Phylo.read(treefile, "newick")
    except:
        print "Error parsing %s: %s." % (treefile, sys.exc_info()[1])
        sys.exit(0)

    dnaml = Dnaml()

    int_aas = dnaml.run_dnaml(seq_align, tree, seq_pos, cdrfile, wdir, report,
                              tag)

    if int_aas is not None:
        try:
            if cdrfile is not None:
                acdr = AnalyseCDR(int_aas, file_name=cdrfile)
                cdr_output = acdr.analyse()
                fo = open(wdir + "/" + tag + "cdr_analysis.html", "w")
                fo.write(cdr_output)
                fo.close()
        except:
            print "Warning: CDRs were not analysed: " + str(sys.exc_info()[1])

        try:
            gc.collect()
            RenderTree.render_annotate(
                wdir + "/" + tag + "annotated_treefile.new",
                wdir + "/" + tag + "annotated_treefile.png")
            gc.collect()
            RenderTree.render_annotate(
                wdir + "/" + tag + "annotated_treefile.new",
                wdir + "/" + tag + "annotated_treefile.svg")
            gc.collect()
            if cdrfile is not None:
                RenderTree.render_annotate(
                    wdir + "/" + tag + "annotated_treefile_sum.new",
                    wdir + "/" + tag + "annotated_treefile_sum.png")
                gc.collect()
                RenderTree.render_annotate(
                    wdir + "/" + tag + "annotated_treefile_sum.new",
                    wdir + "/" + tag + "annotated_treefile_sum.svg")
                gc.collect()
            RenderTree.render_annotate(
                wdir + "/" + tag + "annotated_treefile_tot.new",
                wdir + "/" + tag + "annotated_treefile_tot.png")
            gc.collect()
            RenderTree.render_annotate(
                wdir + "/" + tag + "annotated_treefile_tot.new",
                wdir + "/" + tag + "annotated_treefile_tot.svg")
            gc.collect()
            RenderTree.render_annotate(
                wdir + "/" + tag + "intermediates_treefile.new",
                wdir + "/" + tag + "intermediates_treefile.png")
            gc.collect()
            RenderTree.render_annotate(
                wdir + "/" + tag + "intermediates_treefile.new",
                wdir + "/" + tag + "intermediates_treefile.svg")
            gc.collect()
        except:
            print "Error rendering trees: " + str(sys.exc_info()[1])

        first = True
        orig_recs = []
        for rec in SeqIO.parse(wdir + "/" + tag + "aa_alignment.fa", "fasta"):
            if not first and "node_" not in rec.id:
                orig_recs.append(rec)
            first = False

        logo_alignment_file = wdir + "/" + tag + "alignment_for_logo.fa"
        SeqIO.write(orig_recs, wdir + "/" + tag + "alignment_for_logo.fa",
                    "fasta")

        with open(wdir + "/" + tag + "weblogo_status.txt", "w") as fo:
            retcode = subprocess.call(
                "seqlogo -f %salignment_for_logo.fa -F PNG -o aa_logo -h 2 -w 20 -acS"
                % tag,
                cwd=wdir,
                shell=True,
                stdout=fo,
                stderr=subprocess.STDOUT)
            if retcode == 1:
                fo.write("Trying seqlogo.pl instead.\n")
                retcode = subprocess.call(
                    "seqlogo.pl -f %salignment_for_logo.fa -F PNG -o aa_logo -h 2 -w 20 -acS"
                    % tag,
                    cwd=wdir,
                    shell=True,
                    stdout=fo,
                    stderr=subprocess.STDOUT)
            if retcode == 1:
                print "Weblogo not installed: logo plot will not be generated."