##################################
#                                #
# 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 IDR-formatted npeaks.txt junctionsfilename IDR-threshold outputfile_suffix' % sys.argv[0]
        sys.exit(1)
    
    input = sys.argv[1]
    npeaks = sys.argv[2]
    junctions = sys.argv[3]
    IDRthreshold = float(sys.argv[4])
    outfilename = sys.argv[5]

    linelist = open(npeaks)
    lastIDR=0
    for line in linelist:
        fields=line.strip().split(' ')
        if 'IDR.cutoff' in line:
            continue
        IDR=float(fields[0])
        if IDRthreshold >= lastIDR and IDR >= IDRthreshold:
            minRep1=float(fields[3])
            minRep2=float(fields[4])
            break
        else:
            lastIDR=IDR

    PassingJunctionsDict={}
    NotPassingJunctionsDict={}
    linelist = open(input)
    for line in linelist:
        fields=line.strip().split('\t')
        ID=fields[0]
        rep1=float(fields[1])
        rep2=float(fields[3])
        if rep1 >= minRep1 and rep2 >= minRep2:
            PassingJunctionsDict[ID]=line.strip()
        else:
            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()