#!/usr/bin/python

### GAD PIPELINE ###
## annotate_report_with_aberrant_splice_Leafcutter.py
## Description : annotate a report file with leafcutter results
## Usage : python annotate_report_with_aberrant_splice_leafcutter.py -i <input file> -o <output file> -e <event file>
## Output : an annotated report file including leafcutter annotation for aberrant splice
## Requirements : python 2.7

## Author : Emilie.Tisserant@u-bourgogne.fr, yannis.duffourd@u-bourgogne.fr
## Creation Date : 20170331
## last revision date : 20201020
## Known bugs : None

import os
import sys
import getopt

# Options
try:
    opts, args = getopt.getopt(sys.argv[1:], 'e:i:o:')
    for opt, arg in opts:
        if opt in ("-e"):
            event = arg
        elif opt in ("-i"):
            filein = arg
        elif opt in ("-o"):
            sys.stdout = open(arg, 'w')
except getopt.GetoptError:
    print 'usage : '
    sys.exit(1)


event_dict = {}
stream = open(event, 'r')
for line in stream:
    line = line.strip()
    tabs = line.split('\t')
    if not line.startswith('cluster'):
        event_dict[tabs[7]]=tabs[0]
stream.close()


#Annotate variants
stream = open(filein, 'r')
i = 0
for line in stream:
    line = line.strip()
    tabs = line.split('\t')
    if not line.startswith('#'):
        event_list = []
        tag = 0
        for e in event_dict:
            chrm,start,end = e.split(":")[0],int(e.split(":")[1].split("-")[0])-500,int(e.split(":")[1].split("-")[1])+500
            if tabs[0].split(":")[0] == chrm and int(tabs[0].split(":")[1]) >= start and int(tabs[0].split(":")[1]) <= end:
                event_list.append("Leafcutter:"+e)
                tag += 1
        if tag > 0:
            print "\t".join(tabs[0:])+"\t"+",".join(event_list)
        else:
            print line+"\t."
    else:
        print "\t".join(tabs[0:-1])+"\tLeafcutter_coord\tComments"
stream.close()