annotate find_intervals.py @ 0:4d28d3295ac3 default tip

Uploaded
author rico
date Fri, 06 Apr 2012 13:46:42 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
1 #!/usr/bin/env python
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
2
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
3 import errno
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
4 import os
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
5 import subprocess
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
6 import sys
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
7
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
8 ################################################################################
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
9
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
10 def mkdir_p(path):
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
11 try:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
12 os.makedirs(path)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
13 except OSError, e:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
14 if e.errno <> errno.EEXIST:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
15 raise
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
16
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
17 def run_program(prog, args, stdout_file=None):
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
18 #print "args:", ' '.join(args)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
19 p = subprocess.Popen(args, bufsize=-1, executable=prog, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
20 (stdoutdata, stderrdata) = p.communicate()
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
21 rc = p.returncode
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
22
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
23 if stdout_file is not None:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
24 with open(stdout_file, 'w') as ofh:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
25 print >> ofh, stdoutdata.rstrip('\r\n')
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
26
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
27 if rc != 0:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
28 print >> sys.stderr, "FAILED: rc={0}: {1}".format(rc, ' '.join(args))
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
29 print >> sys.stderr, stderrdata
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
30 sys.exit(1)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
31
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
32 ################################################################################
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
33
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
34 if len(sys.argv) != 11:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
35 print "usage"
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
36 sys.exit(1)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
37
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
38 input, dbkey, output, output_files_path, chrom_col, pos_col, score_col, shuffles, cutoff, report_snps = sys.argv[1:11]
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
39
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
40 prog = 'sweep'
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
41
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
42 args = [ prog ]
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
43 args.append(input)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
44 args.append(chrom_col)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
45 args.append(pos_col)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
46 args.append(score_col)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
47 args.append(cutoff)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
48 args.append(shuffles)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
49 args.append(report_snps)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
50
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
51 run_program(None, args, stdout_file=output)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
52
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
53 if report_snps == "0":
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
54 sys.exit(0)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
55
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
56 ################################################################################
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
57
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
58 mkdir_p(output_files_path)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
59
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
60 bedgraph_filename = 'bedgraph.txt'
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
61 links_filename = os.path.join(output_files_path, 'links.txt')
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
62
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
63 data = []
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
64 links_data = []
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
65
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
66 with open(output) as fh:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
67 chrom = None
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
68 for line in fh:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
69 line = line.rstrip('\r\n')
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
70 if not line:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
71 continue
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
72 if line[0] != ' ':
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
73 # chrom line, add a link
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
74 chrom, interval_begin, interval_end, interval_value = line.split('\t')
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
75 links_data.append((chrom, int(interval_begin), int(interval_end)))
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
76 else:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
77 # data line, add a bedgraph line
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
78 begin, value = line.split()
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
79 data.append((chrom, int(begin), value))
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
80
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
81 with open(bedgraph_filename, 'w') as ofh:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
82 print >> ofh, 'track type=bedGraph'
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
83 for chrom, begin, value in sorted(data):
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
84 print >> ofh, chrom, begin, begin+1, value
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
85
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
86 with open(links_filename, 'w') as ofh:
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
87 for chrom, begin, end in sorted(links_data):
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
88 print >> ofh, chrom, begin, end
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
89
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
90 ################################################################################
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
91
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
92 chrom_sizes_filename = '{0}.chrom.sizes'.format(dbkey)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
93
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
94 prog = 'fetchChromSizes'
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
95
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
96 args = [ prog ]
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
97 args.append(dbkey)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
98
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
99 run_program(None, args, stdout_file=chrom_sizes_filename)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
100
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
101 ################################################################################
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
102
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
103 prog = 'bedGraphToBigWig'
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
104
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
105 args = [ prog ]
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
106 args.append(bedgraph_filename)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
107 args.append(chrom_sizes_filename)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
108 args.append(output)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
109
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
110 run_program(None, args)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
111
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
112 ################################################################################
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
113
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
114 sys.exit(0)
4d28d3295ac3 Uploaded
rico
parents:
diff changeset
115