##################################
#                                #
# Last modified 04/12/2011       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import random

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

def reverseComplement(DNA,sequence):
    
    reversesequence=''
    for i in range(len(sequence)):
        reversesequence=reversesequence+DNA[sequence[len(sequence)-i-1]]
    
    return reversesequence

def run():

    if len(sys.argv) < 4:
        print 'usage: python %s fragment_length read_length numberReads outfile_prefix' % sys.argv[0]
        sys.exit(1)

    fragmentLength = int(sys.argv[1])
    readLength = int(sys.argv[2])
    numberReads = int(sys.argv[3])
    outfile1 = open(sys.argv[4]+'_r1.fastq', 'w')
    outfile2 = open(sys.argv[4]+'_r2.fastq', 'w')

    DNA = {'A':'T','T':'A','G':'C','C':'G'}
    Nucleotides = ['A','T','G','C']

    for i in range(numberReads):
        fragment=''
        for j in range(fragmentLength):
            fragment=fragment+Nucleotides[random.randint(0,3)]
        fragment_reverse=reverseComplement(DNA,fragment)
        read1=fragment[0:readLength]
        read2=fragment_reverse[0:readLength]
        outfile1.write('@fragment_'+str(i)+'/1' +'\n')
        outfile2.write('@fragment_'+str(i)+'/2' +'\n')
        outfile1.write(read1 +'\n')
        outfile2.write(read2 +'\n')
        outfile1.write('+' + '\n')
        outfile2.write('+' + '\n')
        score=''
        for j in range(readLength):
            score=score+'#'
        outfile1.write(score +'\n')
        outfile2.write(score +'\n')

    outfile1.close()
    outfile2.close()

run()

