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