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

import sys
import string
import math
from sets import Set

def run():

    if len(sys.argv) < 4:
        print 'usage: python %s junctions-types-all junctions-combined iIDR-junctions outfilename' % sys.argv[0]
        sys.exit(1)
    
    junctions=sys.argv[1]
    junctions_combined=sys.argv[2]
    iIDR=sys.argv[3]
    outfile = open(sys.argv[4], 'w')

    outfile.write('#chr\tleft\tright\tID\tscore\tstrand\ttotal\tnpIDR\tstaggered\n')

    JunctionDict={}

    linelist = open(junctions)
    for line in linelist:
        if line.startswith('#'):
            continue
        fields=line.strip().split('\t')
        chr=fields[0]
        left=fields[1]
        right=fields[2]
        strand=fields[3]
        total=fields[4]
        staggered=fields[5]
        type=fields[6]
        if strand == '.':
            strand = '+/-'
        ID=chr+':'+left+'-'+right+strand
        JunctionDict[ID]=(chr,left,right,strand,total,staggered,type)    

    linelist = open(junctions_combined)
    IDtoIDRDict={}
    i=0
    for line in linelist:
        if line.startswith('#'):
            continue
        fields=line.strip().split('\t')
        ID=fields[0]
        IDtoIDRDict[i]=ID
        i+=1

    linelist = open(iIDR)
    i=0
    for line in linelist:
        if line.startswith('#'):
            continue
        fields=line.strip().split('\t')
        IDR=fields[0]
        ID=IDtoIDRDict[i]
        if JunctionDict.has_key(ID):
            (chr,left,right,strand,total,staggered,type)=JunctionDict[ID]
            score=100*(math.log((float(staggered)+1),2))
            if score > 1000:
                score=1000.0000
            outline=chr+'\t'+left+'\t'+right+'\tSJ_'+str(i)+'_'+type+'\t'+str(score)+'\t'+strand+'\t'+total+'\t'+IDR+'\t'+staggered
            outfile.write(outline+'\n')
        i+=1

    outfile.close()   

run()