##################################
#                                #
# Last modified 10/04/2011       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import math
from sets import Set

def run():

    if len(sys.argv) < 5:
        print 'usage: python %s constructs.bed constructs.data TSS.data TSSdata_fieldID outfilename' % sys.argv[0]
        sys.exit(1)

    constructs = sys.argv[1]
    data = sys.argv[2]
    TSS = sys.argv[3]
    TSSfield = int(sys.argv[4])
    outfilename = sys.argv[5]

    TSSDataDict={}

    lineslist  = open(TSS)
    for line in lineslist:
        if line[0]=='#':
            header=line
            continue
        fields = line.strip().split('\t')
        chr = fields[0]
        TSS = int(fields[1])
        strand = fields[2]
        TSSDataDict[(chr,TSS,strand)] = float(fields[TSSfield])

    PromoterDict = {}

    lineslist  = open(constructs)
    for line in lineslist:
        if line[0]=='#':
            continue
        fields = line.strip().split('\t')
        score = 0
        chr = fields[1]
        left = int(fields[2])
        right = int(fields[3])
        strand = fields[4]
        ID = fields[0]
        for i in range(left,right):
            if TSSDataDict.has_key((chr,i,strand)):
                score += TSSDataDict[(chr,i,strand)]
        PromoterDict[ID] = score

    outfile = open(outfilename, 'w')

    lineslist  = open(data)
    for line in lineslist:
        if line[0]=='#':
            outfile.write(line)
            continue
        fields = line.strip().split('\t')
        ID = fields[0]
        outline = line.strip() + '\t' + str(PromoterDict[ID]) + '\n'
        outfile.write(outline)

    outfile.close()
        
run()

