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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
1 #!/usr/bin/env python
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
2 import os
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
3 import sys
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
4 import subprocess
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
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
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
7 DATASETS = [
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
8 'artificial',
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
9 'artificial-samples',
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
10 'artificial-nofilt',
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
11 'real',
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
12 'real-mit',
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
13 'real-mit-s',
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
14 'real-nofilt',
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
15 ]
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
16 IN_EXT = '.vcf.in'
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
17 OUT_EXT = '.csv.out'
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
18 ARGS_KEY = '##comment="ARGS='
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
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 &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
22 'test_start': ' <test>',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
23 'input': ' <param name="input" value="tests/%s" />',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
24 'param': ' <param name="%s" value="%s" />',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
25 'output': ' <output name="output" file="tests/%s" />',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
26 'test_end': ' </test>',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
27 'tests_end': ' </tests>',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
28 }
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
29 PARAMS = {
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
30 '-f':'freq',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
31 '-c':'covg',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
32 '-H':'header',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
33 '-s':'stranded',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
34 '-n':'nofilt',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
35 '-r':'seed',
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
36 }
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
37 PARAM_ARG = {
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
38 '-f':True,
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
39 '-c':True,
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
40 '-H':False,
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
41 '-s':False,
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
42 '-n':False,
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
43 '-r':True,
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
44 }
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
45
5
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
46 def main():
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
47
8
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
48 do_print_xml = False
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
49 if len(sys.argv) > 1:
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
50 if sys.argv[1] == '-x':
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
51 do_print_xml = True
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
52 else:
411adeff1eec Handle &#34;.&#34; 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 &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
54 sys.exit(1)
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
55
411adeff1eec Handle &#34;.&#34; 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 &#34;.&#34; 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 &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
58 test_dir = os.path.relpath(test_dir)
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
59
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
60 if do_print_xml:
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
61 print XML.get('tests_start')
5
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
62
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
63 for dataset in DATASETS:
8
411adeff1eec Handle &#34;.&#34; 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 &#34;.&#34; 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
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
66
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
67 if not os.path.exists(infile):
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
68 sys.stderr.write("Error: file not found: "+infile+"\n")
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
69 continue
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
70 if not os.path.exists(outfile):
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
71 sys.stderr.write("Error: file not found: "+outfile+"\n")
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
72 continue
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
73
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
74 options = read_options(infile)
8
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
75 if do_print_xml:
411adeff1eec Handle &#34;.&#34; 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 &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
77 else:
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
78 run_tests(infile, outfile, options, script_dir)
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
79
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
80 if do_print_xml:
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
81 print XML.get('tests_end')
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
82
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
83
411adeff1eec Handle &#34;.&#34; 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 &#34;.&#34; 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 &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
86 bash_cmd = 'diff '+outfile+' <('+script_cmd+')'
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
87 print script_cmd
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
88 subprocess.call(['bash', '-c', bash_cmd])
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
89
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
90
411adeff1eec Handle &#34;.&#34; 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 &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
92 infile = os.path.basename(infile)
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
93 outfile = os.path.basename(outfile)
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
94
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
95 options = options_str.split() # on whitespace
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
96
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
97 print xml.get('test_start')
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
98 print xml.get('input') % infile
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
99
411adeff1eec Handle &#34;.&#34; 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 &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
101 i = 0
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
102 while i < len(options):
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
103 opt = options[i]
411adeff1eec Handle &#34;.&#34; 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 &#34;.&#34; 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 &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
106 +infile+"\n")
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
107 sys.exit(1)
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
108 # takes argument
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
109 if param_arg[opt]:
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
110 i+=1
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
111 arg = options[i]
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
112 print xml.get('param') % (params[opt], arg)
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
113 # no argument (boolean)
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
114 else:
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
115 print xml.get('param') % (params[opt], 'true')
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
116 i+=1
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
117
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
118 print xml.get('output') % outfile
411adeff1eec Handle &#34;.&#34; sample columns, update tests to work with BIAS column.
nick
parents: 5
diff changeset
119 print xml.get('test_end')
5
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
120
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
121
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
122 def read_options(infile):
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
123 with open(infile, 'r') as infilehandle:
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
124 for line in infilehandle:
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
125 line.strip()
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
126 if ARGS_KEY == line[:len(ARGS_KEY)]:
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
127 return line[len(ARGS_KEY):-2]
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
128 return ''
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
129
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
130
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
131 if __name__ == '__main__':
31361191d2d2 Uploaded tarball.
nick
parents:
diff changeset
132 main()