Mercurial > repos > nick > allele_counts
annotate tests/run-tests.py @ 8:411adeff1eec draft
Handle "." sample columns, update tests to work with BIAS column.
author | nick |
---|---|
date | Tue, 23 Aug 2016 02:30:56 -0400 |
parents | 31361191d2d2 |
children | 6cc488e11544 |
rev | line source |
---|---|
5 | 1 #!/usr/bin/env python |
2 import os | |
3 import sys | |
4 import subprocess | |
5 | |
8
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
6 SCRIPT_NAME = 'allele-counts.py' |
5 | 7 DATASETS = [ |
8 'artificial', | |
9 'artificial-samples', | |
10 'artificial-nofilt', | |
11 'real', | |
12 'real-mit', | |
13 'real-mit-s', | |
14 'real-nofilt', | |
15 ] | |
16 IN_EXT = '.vcf.in' | |
17 OUT_EXT = '.csv.out' | |
18 ARGS_KEY = '##comment="ARGS=' | |
19 | |
8
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
20 XML = { |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
21 'tests_start':' <tests>', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
22 'test_start': ' <test>', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
23 'input': ' <param name="input" value="tests/%s" />', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
24 'param': ' <param name="%s" value="%s" />', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
25 'output': ' <output name="output" file="tests/%s" />', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
26 'test_end': ' </test>', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
27 'tests_end': ' </tests>', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
28 } |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
29 PARAMS = { |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
30 '-f':'freq', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
31 '-c':'covg', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
32 '-H':'header', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
33 '-s':'stranded', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
34 '-n':'nofilt', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
35 '-r':'seed', |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
36 } |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
37 PARAM_ARG = { |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
38 '-f':True, |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
39 '-c':True, |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
40 '-H':False, |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
41 '-s':False, |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
42 '-n':False, |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
43 '-r':True, |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
44 } |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
45 |
5 | 46 def main(): |
47 | |
8
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
48 do_print_xml = False |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
49 if len(sys.argv) > 1: |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
50 if sys.argv[1] == '-x': |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
51 do_print_xml = True |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
52 else: |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
53 sys.stderr.write("Error: unrecognized option '"+sys.argv[1]+"'\n") |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
54 sys.exit(1) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
55 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
56 test_dir = os.path.dirname(os.path.realpath(__file__)) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
57 script_dir = os.path.relpath(os.path.dirname(test_dir)) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
58 test_dir = os.path.relpath(test_dir) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
59 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
60 if do_print_xml: |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
61 print XML.get('tests_start') |
5 | 62 |
63 for dataset in DATASETS: | |
8
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
64 infile = os.path.join(test_dir, dataset+IN_EXT) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
65 outfile = os.path.join(test_dir, dataset+OUT_EXT) |
5 | 66 |
67 if not os.path.exists(infile): | |
68 sys.stderr.write("Error: file not found: "+infile+"\n") | |
69 continue | |
70 if not os.path.exists(outfile): | |
71 sys.stderr.write("Error: file not found: "+outfile+"\n") | |
72 continue | |
73 | |
74 options = read_options(infile) | |
8
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
75 if do_print_xml: |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
76 print_xml(infile, outfile, options, XML, PARAMS, PARAM_ARG) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
77 else: |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
78 run_tests(infile, outfile, options, script_dir) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
79 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
80 if do_print_xml: |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
81 print XML.get('tests_end') |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
82 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
83 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
84 def run_tests(infile, outfile, options, script_dir): |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
85 script_cmd = os.path.join(script_dir, SCRIPT_NAME)+' '+options+' -i '+infile |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
86 bash_cmd = 'diff '+outfile+' <('+script_cmd+')' |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
87 print script_cmd |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
88 subprocess.call(['bash', '-c', bash_cmd]) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
89 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
90 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
91 def print_xml(infile, outfile, options_str, xml, params, param_arg): |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
92 infile = os.path.basename(infile) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
93 outfile = os.path.basename(outfile) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
94 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
95 options = options_str.split() # on whitespace |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
96 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
97 print xml.get('test_start') |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
98 print xml.get('input') % infile |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
99 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
100 # read in options one at a time, print <param> line |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
101 i = 0 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
102 while i < len(options): |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
103 opt = options[i] |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
104 if not params.has_key(opt) or not param_arg.has_key(opt): |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
105 sys.stderr.write("Error: unknown option '"+opt+"' in ARGS list in file " |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
106 +infile+"\n") |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
107 sys.exit(1) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
108 # takes argument |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
109 if param_arg[opt]: |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
110 i+=1 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
111 arg = options[i] |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
112 print xml.get('param') % (params[opt], arg) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
113 # no argument (boolean) |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
114 else: |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
115 print xml.get('param') % (params[opt], 'true') |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
116 i+=1 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
117 |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
118 print xml.get('output') % outfile |
411adeff1eec
Handle "." sample columns, update tests to work with BIAS column.
nick
parents:
5
diff
changeset
|
119 print xml.get('test_end') |
5 | 120 |
121 | |
122 def read_options(infile): | |
123 with open(infile, 'r') as infilehandle: | |
124 for line in infilehandle: | |
125 line.strip() | |
126 if ARGS_KEY == line[:len(ARGS_KEY)]: | |
127 return line[len(ARGS_KEY):-2] | |
128 return '' | |
129 | |
130 | |
131 if __name__ == '__main__': | |
132 main() |