##################################
#                                #
# Last modified 7/20/2009         # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys

try:
	import psyco
	psyco.full()
except:
	pass

def run():

    if len(sys.argv) < 3:
        print 'usage: python %s inputfilename readlength outfilename' % sys.argv[0]
        sys.exit(1)

    inputfilename = sys.argv[1]
    readlength=int(sys.argv[2])
    outputfilename = sys.argv[3]

    outfile = open(outputfilename, 'w')

    counts={}
    for i in range(readlength):
        counts[i]={}
        counts[i]['A']=0
        counts[i]['C']=0
        counts[i]['T']=0
        counts[i]['G']=0
        counts[i]['N']=0

    listoflines = open(inputfilename)
    lineslist = listoflines.readlines()
    k=0.0
    for line in lineslist:
        if line[0]=='>':
            continue
        if k % 1000000 == 0:
            print k, 'reads processed'
        k+=1
        read=line.strip()
        for i in range(readlength):
            counts[i][read[i]]+=1

    print 'BP\t',
    outline='BP\t',
    for i in range(readlength):
        print i+1, '\t', 
        p=i+1
        outline=outline+str(p)+'\t'
    outfile.write(outline+'\n')
    print '\nA\t',
    outline='A\t',
    for i in range(readlength):
        print str(counts[i]['A']/k)[0:4],  '\t',
        outline=outline+str(i+1)+'\t'
    outfile.write(outline+'\n')
    print '\nC\t',
    outline='C\t',
    for i in range(readlength):
        print str(counts[i]['C']/k)[0:4],  '\t',
        outline=outline+str(i+1)+'\t'
    outfile.write(outline+'\n')
    print '\nT\t',
    outline='T\t',
    for i in range(readlength):
        print str(counts[i]['T']/k)[0:4], '\t', 
        outline=outline+str(i+1)+'\t'
    outfile.write(outline+'\n')
    print '\nG\t',
    outline='H\t',
    for i in range(readlength):
        print str(counts[i]['G']/k)[0:4], '\t',
        outline=outline+str(i+1)+'\t'
    outfile.write(outline+'\n')
    print '\nN\t',
    outline='N\t',
    for i in range(readlength):
        print str(counts[i]['N']/k)[0:4], '\t',
        outline=outline+str(i+1)+'\t'
    outfile.write(outline+'\n')
        
    outfile.close()

run()

