Mercurial > repos > urgi-team > tandem_repeats_finder
comparison tandem_repeats_finder_wrapper.py @ 0:a2e1d1f25e35 draft default tip
Uploaded
author | urgi-team |
---|---|
date | Thu, 10 Jul 2014 09:32:30 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a2e1d1f25e35 |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 | |
4 import subprocess, tempfile, sys, os, glob, shutil, time | |
5 from optparse import OptionParser | |
6 | |
7 | |
8 class tandemRepeatsFinderWrapper(object): | |
9 | |
10 def __init__(self): | |
11 self._options = None | |
12 | |
13 def getSystemCommand(self, prg, lArgs): | |
14 systemCmd = prg | |
15 for arg in lArgs: | |
16 systemCmd += " " + arg | |
17 return systemCmd | |
18 | |
19 def setOptions(self, options): | |
20 self._options = options | |
21 | |
22 def stop_err(self, msg ): | |
23 sys.stderr.write( "%s\n" % msg ) | |
24 sys.exit() | |
25 | |
26 def setAttributesFromCmdLine(self): | |
27 parser = OptionParser(description = "Tandem Repeats Finder wrapper", version = "4.0") | |
28 parser.add_option( "--html", dest = "html", help = "html summary file for Galaxy") | |
29 parser.add_option( "--dirhtml", dest = "dir", help = "html files directory for Galaxy") | |
30 parser.add_option( "--txt", dest = "txt", default="", help = "txt summary file for Galaxy") | |
31 parser.add_option( "--file", dest = "inputFile", help = "Input Fasta File name") | |
32 parser.add_option( "--match", dest = "match", type="int", default=2, help = "matching weight"), | |
33 parser.add_option( "--mismatch", dest = "mismatch", type="int", default=7, help = "mismatching penalty"), | |
34 parser.add_option( "--delta", dest = "delta", type="int", default = 7, help = "indel penalty") | |
35 parser.add_option( "--pm", dest = "pm", type="int", default=80, help="matching probability") | |
36 parser.add_option( "--pi", dest="pi", type="int", default=10, help="indel probability") | |
37 parser.add_option( "--minscore", dest="minscore", type="int", default=30, help="minimum alignment score to report") | |
38 parser.add_option( "--maxperiod", dest="maxperiod", type="int", default=500, help="maximum period size to report") | |
39 parser.add_option( "--flanking", dest="flanking", action="store_true", help="") | |
40 parser.add_option( "--mask", dest="mask", help="" ) | |
41 options, args = parser.parse_args() | |
42 self._setAttributesFromOptions(options) | |
43 | |
44 def _setAttributesFromOptions(self, options): | |
45 self.setOptions(options) | |
46 | |
47 def run(self): | |
48 prg = "trf" | |
49 args = [] | |
50 args.append("%s" % self._options.inputFile) | |
51 args.append("%d" % self._options.match) | |
52 args.append("%d" % self._options.mismatch) | |
53 args.append("%d" % self._options.delta) | |
54 args.append("%d" % self._options.pm) | |
55 args.append("%d" % self._options.pi) | |
56 args.append("%d" % self._options.minscore) | |
57 args.append("%d" % self._options.maxperiod) | |
58 if not self._options.html and not self._options.dir: | |
59 args.append("-h") | |
60 if self._options.flanking == True: | |
61 args.append("-f") | |
62 if self._options.mask: | |
63 args.append("-m") | |
64 args.append("-d") | |
65 | |
66 cmd = self.getSystemCommand(prg, args) | |
67 | |
68 try: | |
69 tmp_err = tempfile.NamedTemporaryFile().name | |
70 tmp_stderr = open( tmp_err, 'wb' ) | |
71 proc = subprocess.Popen( args=cmd, shell=True, cwd=".", stderr=tmp_stderr ) | |
72 returncode = proc.wait() | |
73 tmp_stderr.close() | |
74 # get stderr, allowing for case where it's very large | |
75 tmp_stderr = open( tmp_err, 'rb' ) | |
76 stderr = '' | |
77 buffsize = 1048576 | |
78 try: | |
79 while True: | |
80 stderr += tmp_stderr.read( buffsize ) | |
81 if not stderr or len( stderr ) % buffsize != 0: | |
82 break | |
83 except OverflowError: | |
84 pass | |
85 tmp_stderr.close() | |
86 if stderr: | |
87 raise Exception, stderr | |
88 except Exception, e: | |
89 self.stop_err( 'Error in Tandem Repeats Finder:\n' + str( e ) ) | |
90 if self._options.html: | |
91 summary = glob.glob("*.summary.html") | |
92 if not summary: | |
93 summary = glob.glob("*1.html") | |
94 | |
95 shutil.move("%s" % (summary[0]) , "%s" % (self._options.html)) | |
96 | |
97 os.mkdir("%s" % (self._options.dir)) | |
98 for results in glob.glob("*.html"): | |
99 baseName = os.path.basename(results) | |
100 shutil.move("%s" % (results) , "%s/%s" % (self._options.dir, baseName)) | |
101 | |
102 if self._options.txt: | |
103 data = glob.glob("*.dat") | |
104 shutil.move("%s" % (data[0]) , "%s" % (self._options.txt)) | |
105 else: | |
106 data = glob.glob("*.dat") | |
107 shutil.move("%s" % (data[0]) , "%s" % (self._options.txt)) | |
108 | |
109 if self._options.mask: | |
110 masked_file = glob.glob("*.mask") | |
111 shutil.move("%s" % (masked_file[0]) , "%s" % (self._options.mask)) | |
112 | |
113 | |
114 if __name__ == "__main__": | |
115 iWrapper = tandemRepeatsFinderWrapper() | |
116 iWrapper.setAttributesFromCmdLine() | |
117 iWrapper.run() |