##################################
#                                #
# Last modified 2024/08/28       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

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

def run():

    if len(sys.argv) < 10:
        print 'usage: python %s input chrFieldID1 chrFieldID2 juicer_path binsize observed/oe BP/FRAG normalization hic.hic outfile [-dropchrprefix]' % 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])
    juicer = sys.argv[4]
    bin = int(sys.argv[5])
    OOE = sys.argv[6]
    BP = sys.argv[7]
    norm = sys.argv[8]
    hic = sys.argv[9]
    outfilename = sys.argv[10]

    doDropChr = False
    if '-dropchrprefix' in sys.argv:
        doDropChr = True

    outfile = open(outfilename,'w')

    linelist = open(input)
    for line in linelist:
        fields = line.strip().split('\t')
        if line.startswith('#'):
            outline = line.strip() + '\t' + 'HiC'
            continue
        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 left1 == right1:
            right1 += bin
        if left2 == right2:
            right2 += bin
        if doDropChr:
            if chr1.startswith('chr'):
                chr1 = chr1[3:]
            if chr2.startswith('chr'):
                chr2 = chr2[3:]
        command = 'java -jar ' + juicer + ' dump ' + OOE + ' ' + norm + ' ' + hic
        command = command + ' ' + chr1 + ':' + str(left1) + ':' + str(right1)
        command = command + ' ' + chr2 + ':' + str(left2) + ':' + str(right2)
        command = command + ' ' + BP + ' ' + str(bin) + ' ' + outfilename + '.temp'
        print command
        os.system(command)
        llinelist = open(outfilename + '.temp')
        score = 0
        for lline in llinelist:
            ffields = lline.strip().split('\t')
            score += float(ffields[2])
            print score, 
        command = 'rm ' + outfilename + '.temp'
        os.system(command)
        outline = line.strip() + '\t' + chr1 + ':' + str(left1) + ':' + str(right1) + '--' + chr2 + ':' + str(left2) + ':' + str(right2) + '\t' + str(score)
        print outline
        outfile.write(outline + '\n')

    outfile.write(outline + '\n')

    outfile.close()
        
run()