annotate tools/mummer/mummer.py @ 6:d9f3d4779507 draft default tip

v0.0.7 stricter error checking; record gnuplot version
author peterjc
date Wed, 10 May 2017 12:14:49 -0400
parents 683ea5ab0008
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
1 #!/usr/bin/env python
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
2 """MUMmer wrapper calling nucmer/promer/mummerplot etc,
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
3
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
4 Takes the following command line options,
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
5 1. FASTA filename of species A
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
6 2. FASTA filename of species B
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
7 3. Algorithm, nucmer or promer
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
8 4. PNG output filename
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
9 5. PDF output filename
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
10 """
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
11
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
12 import os
6
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
13 import shutil
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
14 import sys
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
15 import tempfile
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
16
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
17
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
18 def run(cmd):
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
19 print(cmd)
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
20 return_code = os.system(cmd)
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
21 if return_code:
5
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
22 sys.exit("Error %i from: %s" % (return_code, cmd))
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
23
6
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
24
5
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
25 if "-v" in sys.argv[1:]or "--version" in sys.argv[1:]:
6
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
26 print("MUMmer wrapper v0.0.7\n")
2
8f93c1b7609e Uploaded v0.0.3, dependency on GhostScript package to automatically install ps2pdf
peterjc
parents: 0
diff changeset
27 # TODO - How to get a version string from the mummer binary?
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
28 os.system("nucmer --version")
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
29 os.system("promer --version")
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
30 os.system("mummerplot --version")
6
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
31 os.system("gnuplot --version")
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
32 # TODO - Should we include "gs --version" as a proxy for ps2pdf?
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
33 sys.exit(0)
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
34
5
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
35 # Parse Command Line
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
36 # TODO - optparse
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
37 try:
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
38 fasta_a, fasta_b, algorithm, png_out, pdf_out = sys.argv[1:]
5
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
39 except ValueError:
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
40 sys.exit("Expect 5 arguments, got %i" % (len(sys.argv) - 1))
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
41
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
42
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
43 valid_algo = ["mummer", "nucmer", "promer"]
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
44 if algorithm not in valid_algo:
5
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
45 sys.exit("Invalid algorithm argument %r, should be: %s" % (algorithm, ", ".join(valid_algo)))
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
46
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
47 base_path = tempfile.mkdtemp()
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
48 prefix = os.path.join(base_path, "ref_qry")
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
49 coords = prefix + ".mums"
5
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
50 # gnuplot = prefix + ".gp"
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
51 ps_image = prefix + ".ps"
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
52 png_image = prefix + ".png"
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
53
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
54 if algorithm == "mummer":
5
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
55 # Add -mum as per example to find maximal unique matches between ref and query.
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
56 # Add the -b -c options to search both strands and report relative to forward strand
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
57 # which then matches the default dual-strand approach in nucmer and promer
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
58 cmd = '%s -mum -b -c "%s" "%s" > %s' % (algorithm, fasta_a, fasta_b, coords)
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
59 else:
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
60 coords = "out.delta"
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
61 cmd = '%s "%s" "%s"' % (algorithm, fasta_a, fasta_b)
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
62 run(cmd)
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
63
6
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
64 output_failed = False
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
65
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
66 # PNG
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
67 # ===
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
68 cmd = 'mummerplot -R "%s" -Q "%s" --png --large --prefix=%s %s' % (fasta_a, fasta_b, prefix, coords)
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
69 run(cmd)
6
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
70 if os.path.isfile(png_image):
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
71 shutil.move(png_image, png_out)
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
72 else:
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
73 sys.stderr.write("ERROR: PNG file not created.\n")
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
74 output_failed = True
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
75
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
76 # PS --> PDF
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
77 # ==========
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
78 # Using --large, puts "set size 3,3" in the gnuplot - which seems to mess up.
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
79 # Problem here is the default bbox (BoundingBox) in the PS output is letter page size,
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
80 # and even if we override that, at least when view the PS output in Adobe Illustrator
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
81 # things don't seem to be lined up properly :(
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
82 #
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
83 # Using "set size 1,1" works better - which is what --small gives:
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
84 cmd = 'mummerplot -R "%s" -Q "%s" --postscript --small --prefix=%s %s' % (fasta_a, fasta_b, prefix, coords)
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
85 run(cmd)
6
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
86 if not os.path.isfile(ps_image):
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
87 sys.stderr.write("ERROR: PostScript file needed for PDF output was not created.\n")
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
88 output_failed = True
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
89 else:
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
90 cmd = 'ps2pdf -dEPSCrop "%s" "%s"' % (ps_image, pdf_out)
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
91 run(cmd)
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
92 if not os.path.isfile(pdf_out):
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
93 sys.stderr.write("ERROR: PDF file not created.\n")
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
94 output_failed = True
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
95
5
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
96 # Remove temp files...
683ea5ab0008 v0.0.6 Fixed input parameter help text
peterjc
parents: 4
diff changeset
97 os.remove(coords) # Might not be under the temp directory...
0
b0551f2a5986 Uploaded v0.0.1, essentially a preview (previously only on the TestToolShed). No tests yet, no gnuplot or ps2pdf dependency yet.
peterjc
parents:
diff changeset
98 shutil.rmtree(base_path)
6
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
99
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
100 if output_failed:
d9f3d4779507 v0.0.7 stricter error checking; record gnuplot version
peterjc
parents: 5
diff changeset
101 sys.exit("ERROR: Failed to produce output file(s).")