##################################
#                                #
# Last modified 08/17/2011       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import math
from sets import Set

def run():

    if len(sys.argv) < 5:
        print 'usage: python %s  datafilename chrFieldID left_radius right_radius outfilename [-splitby string]' % sys.argv[0]
        sys.exit(1)

    datafilename = sys.argv[1]
    fieldID1 = int(sys.argv[2])
    leftRadius = int(sys.argv[3])
    rightRadius = int(sys.argv[4])
    outfilename = sys.argv[5]

    splitBy='\t'
    if '-splitby' in sys.argv:
        splitBy=sys.argv[sys.argv.index('-splitby') + 1]

    outfile = open(outfilename, 'w')

    lineslist  = open(datafilename)
    t=0
    for line in lineslist:
        t+=1
        if t % 1000000 == 0:
            print t, 'lines processed'
        if line[0]=='#':
            outfile.write(line)
            continue
        fields = line.strip().split(splitBy)
        left = int(fields[fieldID1+1])
        right = int(fields[fieldID1+2])
        center = int((right+left)/2.0)
        newLeft = center - leftRadius
        newRight = center + rightRadius
        outline=''
        for i in range(fieldID1+1):
            outline=outline+fields[i]+'\t'
        outline = outline + str(newLeft) + '\t' + str(newRight) + '\t'
        for i in range(fieldID1+3,len(fields)):
            outline=outline+fields[i]+'\t'
        outfile.write(outline.strip() + '\n')
        
    outfile.close()
        
run()

