##################################
#                                #
# Last modified 2019/02/15       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import math

def run():

    if len(sys.argv) < 4:
        print 'usage: python %s IDR cutoff chrom.sizes output' % sys.argv[0]
        print '\tNote: the scritp will take the first 10 fields and sort by coordinates'
        print '\tNote: it assumes the IDR score is in field 11 (0-based)'
        sys.exit(1)

    input = sys.argv[1]
    maxIDR = -math.log10(float(sys.argv[2]))
    chrominfo = sys.argv[3]
    chromSizeDict = {}
    linelist = open(chrominfo)
    for line in linelist:
        fields = line.strip().split('\t')
        chr = fields[0]
        chromSizeDict[chr] = int(fields[1])
    outfile = open(sys.argv[4],'w')

    LineList = []

    lines = open(input)
    for line in lines:
        fields = line.strip().split('\t')
        IDR = float(fields[11])
        if IDR < maxIDR:
            continue
        LineList.append((fields[0],int(fields[1]),int(fields[2]),fields[3],fields[4],fields[5],fields[6],fields[7],fields[8],fields[9]))

    LineList.sort()

    for (chr,left,right,l4,l5,l6,l7,l8,l9,l10) in LineList:
        outline = chr + '\t' + str(max(0,left)) + '\t' + str(min(chromSizeDict[chr],right))
        outline = outline + '\t' + l4 + '\t' + l5 + '\t' + l6 + '\t' + l7 + '\t' + l8 + '\t' + l9 + '\t' + l10
        outfile.write(outline + '\n')

    outfile.close()

run()

