##################################
#                                #
# Last modified 2018/10/01       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import math

def run():

    if len(sys.argv) < 2:
        print 'usage: python %s config output [-HOCOMOCO]' % sys.argv[0]
        print '\tconfig format: label <tab> ame.tsv'
        sys.exit(1)

    doHOCOMOCO = False
    if '-HOCOMOCO' in sys.argv:
        doHOCOMOCO = True

    FileDict = {}
    linelist = open(sys.argv[1])
    for line in linelist:
        fields = line.strip().split('\t')
        L = fields[0]
        FileDict[L] = fields[1]

    labels = FileDict.keys()
    labels.sort()

    outfile = open(sys.argv[2],'w')

    outline = '#TF\tMotif_ID'
    for L in labels:
#        print L
        outline = outline + '\t' + L
    outfile.write(outline + '\n')

    MotfiDict = {}

    for L in labels:
        InMotifs = False
        linelist = open(FileDict[L])
        for line in linelist:
            if line.strip() == '':
                continue
            if line.startswith('rank\tmotif_DB'):
                continue
            if line.startswith('#'):
                continue
            fields = line.strip().split('\t')
            ID = fields[2]
            TF = fields[3]
            if doHOCOMOCO:
                TF = ID.split('_')[0]
                ID = ID.split('_')[1]
            pval = float(fields[6])
            if MotfiDict.has_key((TF,ID)):
                pass
            else:
                MotfiDict[(TF,ID)] = {}
            MotfiDict[(TF,ID)][L] = pval

    TFs = MotfiDict.keys()
    TFs.sort()

    for (TF,ID) in TFs:
        outline = TF + '\t' + ID
        for L in labels:
            if MotfiDict[(TF,ID)].has_key(L):
                p = MotfiDict[(TF,ID)][L]
                if p == 0:
                    logp = 1000
                else:
                    logp = -math.log(p,10)
                outline = outline + '\t' + str(logp)
            else:
                outline = outline + '\t' + str(0)
        outfile.write(outline + '\n')

    outfile.close()

run()

