##################################
#                                #
# Last modified 10/28/2015       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import os

def run():

    if len(sys.argv) < 2:
        print 'usage: python %s wig outfilename [-cap float] [-floor float]' % sys.argv[0]
        print '\tNote: only one chromosome per file is assumed'
        sys.exit(1)

    input = sys.argv[1]
    outfile = open(sys.argv[2],'w')

    doCap = False
    if '-cap' in sys.argv:
        doCap = True
        Cap = float(sys.argv[sys.argv.index('-cap') + 1])

    doFloor = False
    if '-floor' in sys.argv:
        doFloor = True
        Floor = float(sys.argv[sys.argv.index('-floor') + 1])

    right = ''
    left = ''
    InConsecutive = False
    linelist = open(input)
    for line in linelist:
        if line.startswith('#'):
            continue
        fields = line.strip().split('\t')
        newleft = int(fields[1])
        newright = int(fields[2])
        newscore = float(fields[3])
        if doCap:
            if newscore > Cap:
                newscore = Cap
        if doFloor:
            if newscore < Floor:
                newscore = Floor
        if right == '' and left == '':
            pass
        else:
            if newscore == score:
                if not InConsecutive:
                    outline = str(left) + '\t' + str(score)
                    outfile.write(outline + '\n')
                InConsecutive = True
            else:
                InConsecutive = False
                outline = str(left) + '\t' + str(score)
                outfile.write(outline + '\n')
                outline = str(right) + '\t' + str(score)
                outfile.write(outline + '\n')
                if newleft != right:
                    outline = str(right) + '\t' + '0'
                    outfile.write(outline + '\n')
                    outline = str(newleft) + '\t' + '0'
                    outfile.write(outline + '\n')
        left = newleft
        right = newright
        score = newscore

    outline = str(left) + '\t' + str(score)
    outfile.write(outline + '\n')
    outline = str(right) + '\t' + str(score)
    outfile.write(outline + '\n')
    if newleft == right:
        outline = str(right) + '\t' + '0'
        outfile.write(outline + '\n')
        outline = str(newleft) + '\t' + '0'
        outfile.write(outline + '\n')

    outfile.close()

run()

