9ab0e5cc221ce3e6e0c19b50940eb0a24ea56243
max
  Thu Sep 25 01:22:04 2014 -0700
moving small tools into utils directory
diff --git src/utils/bedFixBlockOverlaps src/utils/bedFixBlockOverlaps
new file mode 100755
index 0000000..292d47d
--- /dev/null
+++ src/utils/bedFixBlockOverlaps
@@ -0,0 +1,54 @@
+#!/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 = []
+
+    # go over blockLens/blockStarts and fix overlaps
+    pos = 0
+    for bs, bl in zip(bStarts, bSizes):
+        if pos>bs:
+            diff = pos-bs
+            bs = pos
+            bl = bl-diff
+        pos += bl
+        newLens.append(str(bl))
+        newStarts.append(str(bs))
+    row[10] = ",".join(newLens)
+    row[11] = ",".join(newStarts)
+    print "\t".join(row)
+
+
+