##################################
#                                #
# Last modified 2017/01/02       # 
#                                #
# 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.txt'
        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 InMotifs:
                ID = line.strip().split('exact test p-value of motif ')[1].split(' ')[0]
                TF = line.strip().split('exact test p-value of motif ')[1].split(' ')[1]
                if doHOCOMOCO:
                    TF = ID.split('_')[0]
                    ID = ID.split('_')[1]
                pval = float(line.strip().split('Corrected p-value: ')[1].split(')')[0])
#                print line.strip()
#                print ID, TF, pval
                if MotfiDict.has_key((TF,ID)):
                    pass
                else:
                    MotfiDict[(TF,ID)] = {}
                MotfiDict[(TF,ID)][L] = pval
            else:
                if line.startswith('Motif p-values are corrected'):
                    InMotifs = True
                    continue
    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()

