-
Notifications
You must be signed in to change notification settings - Fork 1
/
bedFixBlockOverlaps
executable file
·54 lines (43 loc) · 1.49 KB
/
bedFixBlockOverlaps
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env python
import logging, sys, optparse
from collections import defaultdict
from os.path import join, basename, dirname, isfile
# === COMMAND LINE INTERFACE, OPTIONS AND HELP ===
parser = optparse.OptionParser("usage: %prog [options] filename - fix overlapping blocks in a bed file, produced e.g. by pslMap")
parser.add_option("-d", "--debug", dest="debug", action="store_true", help="show debug messages")
#parser.add_option("-f", "--file", dest="file", action="store", help="run on file")
#parser.add_option("", "--test", dest="test", action="store_true", help="do something")
(options, args) = parser.parse_args()
if options.debug:
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
# ==== FUNCTIONs =====
# ----------- MAIN --------------
if args==[]:
parser.print_help()
exit(1)
filename = args[0]
if filename=="stdin":
ifh = sys.stdin
else:
ifh = open(filename)
for line in ifh:
row = line.rstrip("\n").split("\t")
bSizes = [int(x) for x in row[10].strip(",").split(",")]
bStarts = [int(x) for x in row[11].strip(",").split(",")]
newLens = []
newStarts = []
pos = 0
for bs, bl in zip(bStarts, bSizes):
if pos>bs:
diff = pos-bs
bs = pos
bl = bl-diff
#print bs, bl, pos, bs, bl
pos+= bl
newLens.append(str(bl))
newStarts.append(str(bs))
row[10] = ",".join(newLens)
row[11] = ",".join(newStarts)
print "\t".join(row)