##################################
#                                #
# Last modified 03/26/2013       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys

def run():

    if len(sys.argv) < 5:
        print 'usage: python %s inputfilename sequenceFieldID qualityScoreFieldID [labelFieldID(s) | none] outfilename [-minSeqLen number]' % sys.argv[0]
        print '\tNote: use - instead of an input file name to indicate stanard input'
        print '\tNote: use - instead of an output file name to indicate stanard output'
        sys.exit(1)

    inputfilename = sys.argv[1]
    seqID = int(sys.argv[2])
    QualScoreID = int(sys.argv[3])
    labelIDs=[]
    outputfilename = sys.argv[5]

    doStdInput = False
    if inputfilename == '-':
        doStdInput = True

    doStdOutput = False
    if outputfilename == '-':
        doStdOutput = True

    doCounts=False
    if sys.argv[4] == 'none':
        doCounts=True
        if not doStdOutput:
            print 'will output reads IDs read 1,2,3 ... N'
    else:
        fields = sys.argv[4].split(',')
        for ID in fields:
            labelIDs.append(int(ID))
        labelIDs.sort()
        if not doStdOutput:
            print labelIDs

    doMinSeqLen=False
    if '-minSeqLen' in sys.argv:
        doMinSeqLen=True
        minSeqLen = int(sys.argv[sys.argv.index('-minSeqLen')+1])

    outfile = open(outputfilename, 'w')

    if doStdInput:
        lineslist  = sys.stdin
    else:
        lineslist  = open(inputfilename)
    c=0
    for line in lineslist:
        c+=1 
        if line.startswith('#'):
            continue
        fields = line.split('\t')
        if doMinSeqLen and len(fields[seqID].strip()) < minSeqLen:
            continue
        outline = '@' 
        if doCounts:
            outline = outline + 'read' + str(c)
        else:
            for ID in labelIDs:
                outline = outline + fields[ID] + '|'
            outline = outline[:-1]
        if not doStdOutput:
            outfile.write(outline + '\n')
            outline = fields[seqID]
            outfile.write(outline.strip() + '\n')
            outfile.write('+\n')
            outline = fields[QualScoreID]
            outfile.write(outline.strip() + '\n')
        else:
            print outline
            print fields[seqID]
            print '+'
            print fields[QualScoreID]
 
    outfile.close()

run()

