##################################
#                                #
# Last modified 04/29/2013       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
from sets import Set

def run():

    if len(sys.argv) < 5:
        print 'usage: python %s gtf IDtoNameTable geneIDfiled geneNamefield outfilename' % sys.argv[0]
        sys.exit(1)

    GTF = sys.argv[1]
    table = sys.argv[2]
    IDID = int(sys.argv[3])
    nameID = int(sys.argv[4])
    outfilename = sys.argv[5]

    IDtoNameDict={}
    listoflines = open(table)
    i=0
    for line in listoflines:
        if line.startswith('#'):
            continue
        fields=line.strip().split('\t')
        ID=fields[IDID]
        name=fields[nameID]
        IDtoNameDict[ID]=name
    
    outfile = open(outfilename, 'w')

    listoflines = open(GTF)
    notfound=0
    for line in listoflines:
        fields=line.strip().split('\t')
        geneID = fields[8].split('gene_id "')[1].split('";')[0]
        if IDtoNameDict.has_key(geneID):
            name = IDtoNameDict[geneID]
        else:
            name = geneID
        outline=line.strip() + ' gene_name "' + name + '";'
        outfile.write(outline+'\n')

    outfile.close()

run()

