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

import sys
import string
import math
from sets import Set

def run():

    if len(sys.argv) < 7:
        print 'usage: python %s GENCODE-data gtf iIDR gtf1 gtf-outfilename1 gtf2 gtf-outfilename2' % sys.argv[0]
        sys.exit(1)
    
    GENCODEGTF=sys.argv[1]
    input=sys.argv[2]
    iIDR=sys.argv[3]
    GTF1 = sys.argv[4]
    GTF2 = sys.argv[5]
    gtfoutfile1 = open(sys.argv[6], 'w')
    gtfoutfile2 = open(sys.argv[7], 'w')

    typeDict={}
    linelist = open(GENCODEGTF)
    for line in linelist:
        fields=line.strip().split('\t')
        ID = fields[8].split('transcript_id "')[1].split('";')[0]
        typeDict[ID]=fields[1]

    numbertoIDRDict={}
    i=0
    linelist = open(iIDR)
    for line in linelist:
        fields=line.strip().split('\t')
        IDR=fields[0]
        numbertoIDRDict[i]=IDR
        i+=1

    IDtoIDRDict={}

    i=0
    linelist = open(input)
    for line in linelist:
        if line.startswith('ID1'):
            continue
        fields=line.strip().split('\t')
        ID=fields[0]
        IDR=numbertoIDRDict[i]
        chr=fields[1]
        left=fields[2]
        right=fields[3]
        FPKM1=fields[4]
        FMI1=fields[5]
        frac1=fields[6]
        FPKM1_lo=fields[7]
        FPKM1_hi=fields[8]
        coverage1=fields[9]
        length1=fields[10]
        effective_length1=fields[11]
        status1=fields[12]
        FPKM2=fields[13]
        FMI2=fields[14]
        frac2=fields[15]
        FPKM2_lo=fields[16]
        FPKM2_hi=fields[17]
        coverage2=fields[18]
        length2=fields[19]
        effective_length2=fields[20]
        status2=fields[21]
        score1=100*(math.log((float(FPKM1)+1),2))
        score2=100*(math.log((float(FPKM1)+1),2))
        IDtoIDRDict[ID]=(IDR,score1,score2)
        i+=1

    linelist = open(GTF1)
    for line in linelist:
        if line.startswith('#'):
            continue
        fields=line.strip().split('\t')
        ID = fields[8].split('transcript_id "')[1].split('";')[0]
        type=typeDict[ID]
        (IDR,score1,score2)=IDtoIDRDict[ID]
        attributes=fields[8]+' npIDR "' + str(IDR)+'";'
        outline=fields[0] +'\t'+ type +'\t'+ fields[2] +'\t'+ fields[3] +'\t'+ fields[4] +'\t'+ str(score1)[0:7] +'\t'+ fields[6] +'\t'+ fields[7] +'\t'+ attributes
        gtfoutfile1.write(outline+'\n')

    gtfoutfile1.close()

    linelist = open(GTF2)
    for line in linelist:
        if line.startswith('#'):
            continue
        fields=line.strip().split('\t')
        ID = fields[8].split('transcript_id "')[1].split('";')[0]
        type=typeDict[ID]
        (IDR,score1,score2)=IDtoIDRDict[ID]
        attributes=fields[8]+' npIDR "' + str(IDR)+'";'
        outline=fields[0] +'\t'+ type +'\t'+ fields[2] +'\t'+ fields[3] +'\t'+ fields[4] +'\t'+ str(score2)[0:7] +'\t'+ fields[6] +'\t'+ fields[7] +'\t'+ attributes
        gtfoutfile2.write(outline+'\n')

    gtfoutfile2.close()


run()