Mercurial > repos > peterjc > blast2go
comparison tools/ncbi_blast_plus/blast2go.py @ 0:4bfd64cf18ab
Migrated tool version 0.0.1 from old tool shed archive to new tool shed repository
| author | peterjc |
|---|---|
| date | Tue, 07 Jun 2011 15:51:25 -0400 |
| parents | |
| children | 7b53cc52e7ed |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:4bfd64cf18ab |
|---|---|
| 1 #!/usr/bin/env python | |
| 2 """Galaxy wrapper for Blast2GO for pipelines, b2g4pipe v2.3.5. | |
| 3 | |
| 4 This script takes exactly three command line arguments: | |
| 5 * Input BLAST XML filename | |
| 6 * Blast2GO properties filename (settings file) | |
| 7 * Output tabular filename | |
| 8 | |
| 9 It then calls the Java command line tool, and moves the output file to | |
| 10 the location Galaxy is expecting. | |
| 11 """ | |
| 12 import sys | |
| 13 import os | |
| 14 import subprocess | |
| 15 | |
| 16 #You may need to edit this to match your local setup, | |
| 17 blast2go_jar = "/opt/b2g4pipe/blast2go.jar" | |
| 18 | |
| 19 | |
| 20 def stop_err(msg, error_level=1): | |
| 21 """Print error message to stdout and quit with given error level.""" | |
| 22 sys.stderr.write("%s\n" % msg) | |
| 23 sys.exit(error_level) | |
| 24 | |
| 25 if len(sys.argv) != 4: | |
| 26 stop_err("Require three arguments: XML filename, properties filename, output tabular filename") | |
| 27 | |
| 28 xml_file, prop_file, tabular_file = sys.argv[1:] | |
| 29 | |
| 30 if not os.path.isfile(xml_file): | |
| 31 stop_err("Input BLAST XML file not found: %s" % xml_file) | |
| 32 | |
| 33 if not os.path.isfile(prop_file): | |
| 34 stop_err("Blast2GO configuration file not found: %s" % prop_file) | |
| 35 | |
| 36 def run(cmd): | |
| 37 #Avoid using shell=True when we call subprocess to ensure if the Python | |
| 38 #script is killed, so too is the child process. | |
| 39 try: | |
| 40 child = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
| 41 except Exception, err: | |
| 42 stop_err("Error invoking command:\n%s\n\n%s\n" % (" ".join(cmd), err)) | |
| 43 #Use .communicate as can get deadlocks with .wait(), | |
| 44 stdout, stderr = child.communicate() | |
| 45 return_code = child.returncode | |
| 46 if return_code: | |
| 47 if stderr and stdout: | |
| 48 stop_err("Return code %i from command:\n%s\n\n%s\n\n%s" % (return_code, err, stdout, stderr)) | |
| 49 else: | |
| 50 stop_err("Return code %i from command:\n%s\n%s" % (return_code, err, stderr)) | |
| 51 #For early diagnostics, | |
| 52 else: | |
| 53 print stdout | |
| 54 print stderr | |
| 55 | |
| 56 if not os.path.isfile(blast2go_jar): | |
| 57 stop_err("Blast2GO JAR file not found: %s" % blast2go_jar) | |
| 58 | |
| 59 #We will have write access whereever the output should be, | |
| 60 #so we'll ask Blast2GO to use that as the stem for its output | |
| 61 #(it will append .annot to the filename) | |
| 62 cmd = ["java", "-jar", blast2go_jar, | |
| 63 "-in", xml_file, | |
| 64 "-prop", prop_file, | |
| 65 "-out", tabular_file, | |
| 66 "-a"] | |
| 67 run(cmd) | |
| 68 | |
| 69 out_file = tabular_file + ".annot" | |
| 70 if not os.path.isfile(out_file): | |
| 71 stop_err("ERROR - No output annotation file from Blast2GO") | |
| 72 | |
| 73 #Move the output file where Galaxy expects it to be: | |
| 74 os.rename(out_file, tabular_file) | |
| 75 | |
| 76 print "Done" |
