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" |