##################################
#                                #
# Last modified 2019/10/12       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import pysam
import string
from sets import Set
import os
import subprocess

def run():

    if len(sys.argv) < 9:
        print 'usage: python %s input chrFieldID1 chrFieldID2 straw_path binsize BP/FRAG normalization hic.hic outfile' % sys.argv[0]
        print '\tlist_of_files format: label <tab> file_name'
        sys.exit(1)

    input = sys.argv[1]
    chrFieldID1 = int(sys.argv[2])
    chrFieldID2 = int(sys.argv[3])
    straw = sys.argv[4]
    bin = int(sys.argv[5])
    BP = sys.argv[6]
    norm = sys.argv[7]
    hic = sys.argv[8]
    outfilename = sys.argv[9]

    outfile = open(outfilename,'w')

    linelist = open(input)
    LL = 0
    for line in linelist:
        fields = line.strip().split('\t')
        if line.startswith('#'):
            outline = line.strip() + '\t' + 'HiC'
            continue
        LL += 1
        if LL % 100 == 0:
            print LL, 'region pairs processed'
        chr1 = fields[chrFieldID1]
        left1 = int(fields[chrFieldID1 + 1])
        right1 = int(fields[chrFieldID1 + 2])
        chr2 = fields[chrFieldID2]
        left2 = int(fields[chrFieldID2 + 1])
        right2 = int(fields[chrFieldID2 + 2])
        if (left1 % bin) < 0.5*bin:
            left1 = left1 - (left1 % bin)
        else:
            left1 = left1 - (left1 % bin) + bin
        if (right1 % bin) < 0.5*bin:
            right1 = right1 - (right1 % bin)
        else:
            right1 = right1 - (right1 % bin) + bin
        if (left2 % bin) < 0.5*bin:
            left2 = left2 - (left2 % bin)
        else:
            left2 = left2 - (left2 % bin) + bin
        if (right2 % bin) < 0.5*bin:
            right2 = right2 - (right2 % bin)
        else:
            right2 = right2 - (right2 % bin) + bin
#        if chr1.startswith('chr'):
#            chr1 = chr1[3:]
#        if chr2.startswith('chr'):
#            chr2 = chr2[3:]
        command = straw + ' ' + norm + ' ' + hic
        command = command + ' ' + chr1 + ':' + str(left1) + ':' + str(right1)
        command = command + ' ' + chr2 + ':' + str(left2) + ':' + str(right2)
        command = command + ' ' + BP + ' ' + str(bin)
        print command
        p = os.popen(command, "r")
        lline = 'lline'
        score = 0
        while lline != '':
            lline = p.readline()
            if lline == '':
                break
            ffields = lline.strip().split('\t')
            score += float(ffields[2])
        outline = line.strip() + '\t' + chr1 + ':' + str(left1) + ':' + str(right1) + '--' + chr2 + ':' + str(left2) + ':' + str(right2) + '\t' + str(score)
        outfile.write(outline + '\n')

    outfile.write(outline + '\n')

    outfile.close()
        
run()