Mercurial > repos > malex > tandem_repeats_finder
comparison trf_wrapper.py @ 1:2a3c8b2d5979 default tip
Uploaded the wrapper file
author | malex |
---|---|
date | Wed, 30 Nov 2011 12:18:55 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:7676570eb676 | 1:2a3c8b2d5979 |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 """ | |
4 Runs TRF on a sequence file. | |
5 For use with trf version 4.04 | |
6 | |
7 usage: trf_wrapper.py input_file <required parameters> [options] | |
8 Required parameters: | |
9 match | |
10 mismatch | |
11 indels | |
12 match_probability (%, 10-100) | |
13 indel_probability (%, 10-100) | |
14 minimal score (30-150) | |
15 maximum period size (1-2000) | |
16 """ | |
17 | |
18 import optparse, os, shutil, subprocess, sys, re | |
19 from os.path import abspath | |
20 | |
21 def remove_bgcolor(infilename,outfilename): | |
22 infile = open(infilename, "r") | |
23 outfile = open(outfilename, "w") | |
24 bgcolor = re.compile(r'FBF8BC') | |
25 for line in infile: | |
26 line = bgcolor.sub('FFFFFF', line) | |
27 outfile.write(line) | |
28 infile.close() | |
29 outfile.close() | |
30 os.remove(infilename) | |
31 | |
32 def remove_html(infilename,outfilename): | |
33 infile = open(infilename, "r") | |
34 outfile = open(outfilename, "w") | |
35 opena = re.compile(r'<A\ HREF.*?>') | |
36 bgcolor = re.compile(r'FBF8BC') | |
37 closea = re.compile(r'</A>') | |
38 for line in infile: | |
39 line = opena.sub('', line) | |
40 line = bgcolor.sub('FFFFFF', line) | |
41 line = closea.sub('', line) | |
42 outfile.write(line) | |
43 infile.close() | |
44 outfile.close() | |
45 os.remove(infilename) | |
46 | |
47 def stop_err(msg): | |
48 sys.stderr.write("%s\n" % msg) | |
49 sys.exit() | |
50 | |
51 def __main__(): | |
52 #Parse arguments | |
53 usage = "usage: %prog input match mismatch indels match_p indel_p min_score max_period [options]" | |
54 parser = optparse.OptionParser(usage) | |
55 parser.add_option( '-f', '--flanking', dest='flanking', action='store_true', help='Flanking sequence' ) | |
56 parser.add_option( '-m', '--masked', dest='masked', action='store_true', help='Masked sequence' ) | |
57 parser.add_option( '-r', '--redundancy', dest='redundancy', action='store_true', help='No redundance elimination' ) | |
58 parser.add_option( '-o', '--datoutput', dest='datoutput', action='store', help='Output data file name' ) | |
59 parser.add_option( '-k', '--maskoutput', dest='maskoutput', action='store', help='Output mask file name' ) | |
60 parser.add_option( '-t', '--report', dest='report', action='store', help='Report file name' ) | |
61 parser.add_option( '-i', '--indices', dest='indices', action='store', help='Indices file name' ) | |
62 (opts, arguments) = parser.parse_args() | |
63 | |
64 # Arguments and options | |
65 if len(arguments) != 8: | |
66 print(usage) | |
67 stop_err('Wrong number of arguments passed') | |
68 output_dat = "%s.%s.%s.%s.%s.%s.%s.%s.dat" % (tuple(arguments)) | |
69 output_mask = "%s.%s.%s.%s.%s.%s.%s.%s.mask" % (tuple(arguments)) | |
70 output_report = "%s.%s.%s.%s.%s.%s.%s.%s.1.html" % (tuple(arguments)) | |
71 output_indices = "%s.%s.%s.%s.%s.%s.%s.%s.1.txt.html" % (tuple(arguments)) | |
72 | |
73 if opts.masked and opts.masked == True: | |
74 arguments.append('-m') | |
75 if opts.flanking and opts.flanking == True: | |
76 arguments.append('-f') | |
77 if opts.redundancy and opts.redundancy == True: | |
78 arguments.append('-r') | |
79 if opts.datoutput and opts.datoutput != '': | |
80 output_dat_filename = opts.datoutput | |
81 if opts.maskoutput and opts.maskoutput != '': | |
82 output_mask_filename = opts.maskoutput | |
83 if opts.report and opts.report != '': | |
84 output_report_filename = opts.report | |
85 if opts.indices and opts.indices != '': | |
86 output_indices_filename = opts.indices | |
87 | |
88 # Run | |
89 cmd = arguments | |
90 cmd.insert(0,"trf") | |
91 # Produce both html and dat files | |
92 cmd.append("-d") | |
93 try: | |
94 proc = subprocess.Popen(args=cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
95 except Exception, err: | |
96 sys.stderr.write("Error invoking command: \n%s\n\n%s\n" % (cmd, err)) | |
97 sys.exit(1) | |
98 stdout, stderr = proc.communicate() | |
99 return_code = proc.returncode | |
100 if return_code != 1: | |
101 sys.stdout.write(stdout) | |
102 sys.stderr.write(stderr) | |
103 sys.stderr.write("Return error code %i from command:\n" % return_code) | |
104 sys.stderr.write("%s\n" % cmd) | |
105 else: | |
106 sys.stdout.write(stdout) | |
107 sys.stdout.write(stderr) | |
108 cdir = os.getcwd() | |
109 file_list = os.listdir(cdir) | |
110 try: | |
111 report_file = os.path.basename(output_report) | |
112 indices_file = os.path.basename(output_indices) | |
113 remove_html(report_file, output_report_filename) | |
114 remove_bgcolor(indices_file, output_indices_filename) | |
115 shutil.move(os.path.basename(output_dat), output_dat_filename) | |
116 # shutil.copyfile(os.path.basename(output_report), output_report_filename) | |
117 # shutil.copyfile(os.path.basename(output_indices), output_indices_filename) | |
118 if opts.masked and opts.masked == True: | |
119 shutil.move(os.path.basename(output_mask), output_mask_filename) | |
120 except Exception, err: | |
121 sys.stderr.write("Error copying output files: \n%s\n" % err) | |
122 if __name__=="__main__": __main__() |