##################################
#                                #
# Last modified 2016/10/29       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import math

def run():

    if len(sys.argv) < 5:
        print 'usage: python %s MotifsRelativePositions overallradius sizeMotif1 sizeMotif2 outfilename' % sys.argv[0]
        print '\tNote: the script will give a 1 score to the first motif and a -1 to the second, 0s everywhere else'
        sys.exit(1)

    input = sys.argv[1]
    radius = int(sys.argv[2])
    halfsize1 = int(round(int(sys.argv[3])/2.))
    halfsize2 = int(round(int(sys.argv[4])/2.))

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

    outline = '#' 
    for i in range(0-radius,0+radius):
        outfile.write(outline + '\t' + str(i))
    outfile.write(outline + '\n')

    RegionDict = {}
    linelist = open(input)
    for line in linelist:
        if line.startswith('#'):
            continue
        fields = line.strip().split('\t')
        ID = fields[0]
        number = fields[1]
        if RegionDict.has_key((number,ID)):
            pass
        else:
            RegionDict[(number,ID)] = {}
            RegionDict[(number,ID)]['mot1'] = []
            RegionDict[(number,ID)]['mot2'] = []
        if fields[2] != 'nan':
            RegionDict[(number,ID)]['mot1'].append(int(float(fields[2])))
        if fields[3] != 'nan':
            RegionDict[(number,ID)]['mot2'].append(int(float(fields[3])))

    regions = RegionDict.keys()
    regions.sort()

    for (number,ID) in regions:
        ScoreDict = {}
        for i in range(0-radius,0+radius):
            ScoreDict[i] = 0
        for pos in RegionDict[(number,ID)]['mot2']:
            for i in range(pos - halfsize2,pos + halfsize2):
                ScoreDict[i] = -1
        for pos in RegionDict[(number,ID)]['mot1']:
            for i in range(pos - halfsize1,pos + halfsize1):
                ScoreDict[i] = 1
        outline = ID
        for i in range(0-radius,0+radius):
            outline = outline + '\t' + str(ScoreDict[i])
        outfile.write(outline + '\n')

    outfile.close()

run()

