##################################
#                                #
# Last modified 11/03/2012       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import random

def run():

    if len(sys.argv) < 4:
        print 'usage: python %s genome.chr.sizes regions chrFiedlID outfilename' % sys.argv[0]
        sys.exit(1)

    chrSizes = sys.argv[1]
    regionsFile = sys.argv[2]
    chrFieldID = int(sys.argv[3])
    outfile = open(sys.argv[4], 'w')

    chrDict = {}
    ChrArray = []
    CoverageDict = {}
    current = 0
    linelist = open(chrSizes)
    for line in linelist:
        fields = line.strip().split('\t')
        chr = fields[0]
        length = int(fields[1])
        chrDict[chr] = length
        CoverageDict[chr] = {}
        ChrArray.append((current,chr))
        current += length
 
    TotalGenomeLength = current

    linelist = open(regionsFile)
    for line in linelist:
        fields = line.strip().split('\t')
        chr = fields[chrFieldID]
        left = int(fields[chrFieldID+1])
        right = int(fields[chrFieldID+2])
        NotFound = True
        while NotFound:
            randomnumber = random.randint(0, TotalGenomeLength)
            for i in range(len(ChrArray)-1):
                chrStart1 = ChrArray[i][0]
                chr1 = ChrArray[i][1]
                chrStart2 = ChrArray[i+1][0]
                chr2 = ChrArray[i+1][1]
                if chrStart2 > randomnumber > chrStart1:
                    chr = chr1
                    pos = randomnumber - chrStart1
                    break
            length = chrDict[chr]
            if pos + (right - left) < length:
                outfile.write(chr + '\t' + str(pos) + '\t' + str(pos + (right - left)) + '\n')
                NotFound = False

    outfile.close()

run()

