06d7be056190c14b85e71bc12523f18ea6815b5e markd Mon Dec 7 00:50:29 2020 -0800 BLAT mmap index support merge with master diff --git src/utils/bedFixBlockOverlaps src/utils/bedFixBlockOverlaps index eb009b4..46786fd 100755 --- src/utils/bedFixBlockOverlaps +++ src/utils/bedFixBlockOverlaps @@ -1,54 +1,55 @@ #!/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 + lastEnd = 0 for bs, bl in zip(bStarts, bSizes): - if pos>bs: - diff = pos-bs - bs = pos + #print("lastEnd, start, length", lastEnd, bs, bl) + if lastEnd!=0 and lastEnd>bs: + diff = lastEnd-bs + bs = lastEnd bl = bl-diff - pos += bl + #print("fixed to: lastEnd, start, length", lastEnd, bs, bl) + lastEnd= bs+bl newLens.append(str(bl)) newStarts.append(str(bs)) row[10] = ",".join(newLens) row[11] = ",".join(newStarts) print("\t".join(row))