annotate tools/mummer/mummer.py @ 4:5f5a358b281f draft

v0.0.5 internal changes
author peterjc
date Wed, 05 Aug 2015 11:34:31 -0400
parents 8f93c1b7609e
children 683ea5ab0008
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
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
13 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
14 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
15 import shutil
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
4
5f5a358b281f v0.0.5 internal changes
peterjc
parents: 2
diff changeset
17 def sys_exit( msg ):
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
18 sys.stderr.write("%s\n" % msg)
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 sys.exit(1)
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
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 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
22 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
23 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
24 if return_code:
4
5f5a358b281f v0.0.5 internal changes
peterjc
parents: 2
diff changeset
25 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
26
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
27 if "-v" in sys.argv [1:]or "--version" in sys.argv[1:]:
2
8f93c1b7609e Uploaded v0.0.3, dependency on GhostScript package to automatically install ps2pdf
peterjc
parents: 0
diff changeset
28 print("MUMmer wrapper v0.0.3\n")
8f93c1b7609e Uploaded v0.0.3, dependency on GhostScript package to automatically install ps2pdf
peterjc
parents: 0
diff changeset
29 # 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
30 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
31 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
32 os.system("mummerplot --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
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
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
35 #Parse Command Line
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
36 #TODO - optparse
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:]
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
39 except:
4
5f5a358b281f v0.0.5 internal changes
peterjc
parents: 2
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:
4
5f5a358b281f v0.0.5 internal changes
peterjc
parents: 2
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"
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
50 #gnuplot = prefix + ".gp"
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":
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
55 #Add -mum as per example to find maximal unique matches between ref and query.
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
56 #Add the -b -c options to search both strands and report relative to forward strand
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
57 #which then matches the default dual-strand approach in nucmer and 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
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
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
64 # 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
65 # ===
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 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
67 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
68 shutil.move(png_image, png_out)
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
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
70 # 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
71 # ==========
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
72 # 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
73 # 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
74 # 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
75 # 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
76 #
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 # 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
78 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
79 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
80 cmd = 'ps2pdf -dEPSCrop "%s" "%s"' % (ps_image, pdf_out)
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 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
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 #Remove temp files...
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 os.remove(coords) # Might not be under the temp directory...
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 shutil.rmtree(base_path)