Mercurial > repos > peterjc > mummer
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 |
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 | 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 | 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 | 35 # Parse Command Line |
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 | 39 except ValueError: |
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 | 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 | 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 | 55 # Add -mum as per example to find maximal unique matches between ref and query. |
56 # Add the -b -c options to search both strands and report relative to forward strand | |
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 | 96 # Remove temp files... |
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).") |