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()