##################################
#                                #
# Last modified 2019/08/23       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string

def run():

    if len(sys.argv) < 2:
        print 'usage: python %s fasta outpurfilename' % sys.argv[0]
        sys.exit(1)

    fasta = sys.argv[1]
    outfilename = sys.argv[2]

    GenomeDict={}
    sequence=''
    inputdatafile = open(fasta)
    for line in inputdatafile:
        if line[0]=='>':
            if sequence != '':
                GenomeDict[chr] = ''.join(sequence)
            chr = line.strip().split('>')[1]
            sequence=[]
            Keep=False
            continue
        else:
            sequence.append(line.strip())
    GenomeDict[chr] = ''.join(sequence)

    outfile = open(outfilename, 'w')
    outfile.write('#chr\tlength\tA\tC\tG\tT\n')

    chromosomes = GenomeDict.keys()
    chromosomes.sort()

    allA = 0.0
    allC = 0.0
    allG = 0.0
    allT = 0.0
    allL = 0

    for chr in chromosomes:
        GenomeDict[chr] = GenomeDict[chr].upper()
        length = len(GenomeDict[chr])
        G = GenomeDict[chr].count('G') + 0.0
        C = GenomeDict[chr].count('C') + 0.0
        A = GenomeDict[chr].count('A') + 0.0
        T = GenomeDict[chr].count('T') + 0.0
        allG += G 
        allC += C
        allA += A
        allT += T
        allL += length
        outline = chr + '\t' + str(length) + '\t' + str(A/(A + C + G + T)) + '\t' + str(C/(A + C + G + T)) + '\t' + str(G/(A + C + G + T)) + '\t' + str(T/(A + C + G + T))
        outfile.write(outline + '\n')

    outline = '#genome-wide\t' + str(allL)
    outline = outline + '\t' + str(allA/(allA + allC + allG + allT))
    outline = outline + '\t' + str(allC/(allA + allC + allG + allT))
    outline = outline + '\t' + str(allG/(allA + allC + allG + allT))
    outline = outline + '\t' + str(allT/(allA + allC + allG + allT))
    outfile.write(outline + '\n')

    outfile.close()
   
run()
