##################################
#                                #
# Last modified 2018/04/16       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import math
from sets import Set
import os

def run():

    if len(sys.argv) < 1:
        print 'usage: python %s gff.gz' % sys.argv[0]
        print "\tinput format:"
        print "\t#chr    Start   End     Score   Strand"
        print "\tchr1    646     646     30      -       coverage=22;context=ATAGAAATAGAGCATCGTCGAGGCGATAGCTTTTTTGATAT;IPDRatio=2.22;frac=0.612;fracLow=0.146;fracUp=0.956;identificationQv=19"
        sys.exit(1)

    input = sys.argv[1]

    outline = '#chr\tStart\tEnd\t%Methylated\tMethylated_reads\tUnmethylated_reads\tStrand\tfracLow\tfracUp'
    print outline

    p=0
    i=0
    if input.endswith('.bz2'):
        cmd = 'bzip2 -cd ' + input
    elif input.endswith('.gz'):
        cmd = 'gunzip -c ' + input
    else:
        cmd = 'cat ' + input
    p1 = os.popen(cmd, "r")
    line = '.'
    while line != '':
        line = p1.readline()
        if line.startswith('#') or line.startswith('track ') or line.strip() == '':
            continue
        fields = line.strip().split('\t')
        type = fields[5]
        chr = fields[0]
        start = fields[1]
        end = fields[2]
        strand = fields[4]
        coverage = int(fields[5].split('coverage=')[1].split(';')[0])
        if 'frac=' in fields[5]:
            pass
        else:
            continue
        frac = float(fields[5].split('frac=')[1].split(';')[0])
        fracLow = float(fields[5].split('fracLow=')[1].split(';')[0])
        fracUp = float(fields[5].split('fracUp=')[1].split(';')[0])
        outline = chr + '\t' + start + '\t' + end
        outline = outline + '\t' + str(100*frac)
        outline = outline + '\t' + str(int(frac*coverage))
        outline = outline + '\t' + str(int(coverage - frac*coverage))
        outline = outline + '\t' + strand
        outline = outline + '\t' + str(100*fracLow)
        outline = outline + '\t' + str(100*fracUp)
        print outline

run()
