##################################
#                                #
# Last modified 11/23/2010       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
from sets import Set

def run():

    print sys.argv

    if len(sys.argv) < 5:
        print 'usage: python %s inputfilename overlapped-peaks.txt junctionsfilename IDR-threshold outputfile_suffix' % sys.argv[0]
        sys.exit(1)
    
    input = sys.argv[1]
    overlapped = sys.argv[2]
    junctions = sys.argv[3]
    IDRthreshold = float(sys.argv[4])
    outfilename = sys.argv[5]

    PassingJunctionsDict={}
    NotPassingJunctionsDict={}
    linelist = open(overlapped)
    for line in linelist:
        fields=line.strip().split(' ')
        try:
            IDR=float(fields[5])
        except:
            print 'skipping line:', line.strip()
            continue
        ID=fields[1][1:-1]
        if IDR <= IDRthreshold:
            PassingJunctionsDict[ID]=''
        else:
            NotPassingJunctionsDict[ID]=''

    linelist = open(input)
    for line in linelist:
        fields=line.strip().split('\t')
        ID=fields[0]
        if fields[1]=='-1' or fields[3]== '-1':
            NotPassingJunctionsDict[ID]=line.strip()

    outfile_passing = open('passing-'+str(IDRthreshold)+'-'+outfilename, 'w')
    outfile_not_passing = open('not-passing-'+str(IDRthreshold)+'-'+outfilename, 'w')
    linelist = open(junctions)
    for line in linelist:
        fields=line.strip().split('\t')
        ID1=fields[0]+'-'+str(int(fields[1])+1)+':'+str(int(fields[2])+1)+fields[3]
        ID2=fields[0]+':'+str(int(fields[1])+1)+'-'+str(int(fields[2])+1)+fields[3]
        if PassingJunctionsDict.has_key(ID1) or PassingJunctionsDict.has_key(ID2):
            outfile_passing.write(line)
        if NotPassingJunctionsDict.has_key(ID1) or NotPassingJunctionsDict.has_key(ID2):
            outfile_not_passing.write(line)

    outfile_passing.close()
    outfile_not_passing.close()
            
run()